鱼C论坛

 找回密码
 立即注册
查看: 3197|回复: 8

python014讲习题中动动手的密码检查程序

[复制链接]
发表于 2016-2-22 22:08:29 | 显示全部楼层 |阅读模式
5鱼币
我自己写了这个程序,但是每次输入密码之后,程序好像并未判断,直接就结束了,求大神看看。。
passwd = input('请输入需要检查的密码组合:')
length = len(passwd)
str_except="~!@#$%^&*()_=-/,.?><;:[]{}|\\"
chars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
num="0123456789"
str_prompt="""请按以下方式提升您的密码安全级别:
          1、密码必须由数字、字母及特殊字符三种组合
          2、密码只能由字母开头
          3、密码长度不能低于16位"""
for each in passwd:
          if (each in chars) or (each in num):
                    if length <= 8:
                              print('您的密码安全级别为:低')
                              print(str_prompt)
for each in passwd:
          if (each in chars) or (each in num) or (each in str_except):
                    if length <= 8:
                              print('您的密码安全级别为:中')
                              print(str_prompt)
for each in passwd:
          if (each in chars) and (each in num) and (each in str_except):
                    if 16>= length >= 8:
                              print("您的密码安全级别为:高")
                              print("请继续保持。。。")

密码检查.png
密码.png

最佳答案

查看完整内容

你这并不是没判断,而是判断多了 按你这么写for each in passwd:,每个字符都会判断一遍,字符有多长,就会把str_prompt输出多少遍 而且你的代码逻辑也不大对,你这相当于把一个字符串遍历了三遍 我的思路是设置三个标识符 flag1 flag2 flag3 初始值都设为0 对这个字符串进行遍历,如果含数字flag1=1, 含字母flag2=1,含特殊符号flag3=1 遍历完以后对这三个标识符的值和字符长度进行判断,然后按照要求再输出不同的语句
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-22 22:08:30 | 显示全部楼层
你这并不是没判断,而是判断多了
搜狗截图20160222223019.png
按你这么写for each in passwd:,每个字符都会判断一遍,字符有多长,就会把str_prompt输出多少遍
而且你的代码逻辑也不大对,你这相当于把一个字符串遍历了三遍

我的思路是设置三个标识符 flag1 flag2 flag3 初始值都设为0
对这个字符串进行遍历,如果含数字flag1=1, 含字母flag2=1,含特殊符号flag3=1
遍历完以后对这三个标识符的值和字符长度进行判断,然后按照要求再输出不同的语句
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-22 22:36:17 | 显示全部楼层
你看看老师的答案, 不懂的看注释~

  1. # 密码安全性检查代码
  2. #
  3. # 低级密码要求:
  4. #   1. 密码由单纯的数字或字母组成
  5. #   2. 密码长度小于等于8位
  6. #
  7. # 中级密码要求:
  8. #   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
  9. #   2. 密码长度不能低于8位
  10. #
  11. # 高级密码要求:
  12. #   1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
  13. #   2. 密码只能由字母开头
  14. #   3. 密码长度不能低于16位

  15. symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
  16. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  17. nums = '0123456789'

  18. passwd = input('请输入需要检查的密码组合:')

  19. # 判断长度
  20. length = len(passwd)

  21. while (passwd.isspace() or length == 0) :
  22.     passwd = input("您输入的密码为空(或空格),请重新输入:")

  23. if length <= 8:
  24.     flag_len = 1
  25. elif 8 < length < 16:
  26.     flag_len = 2
  27. else:
  28.     flag_len = 3

  29. flag_con = 0

  30. # 判断是否包含特殊字符
  31. for each in passwd:
  32.     if each in symbols:
  33.         flag_con += 1
  34.         break
  35.    
  36. # 判断是否包含字母
  37. for each in passwd:
  38.     if each in chars:
  39.         flag_con += 1
  40.         break

  41. # 判断是否包含数字
  42. for each in passwd:
  43.     if each in nums:
  44.         flag_con += 1
  45.         break   

  46. # 打印结果
  47. while 1 :
  48.     print("您的密码安全级别评定为:", end='')
  49.     if flag_len == 1 or flag_con == 1 :
  50.         print("低")
  51.     elif flag_len == 2 or flag_con == 2 :
  52.         print("中")
  53.     else :
  54.         print("高")
  55.         print("请继续保持")
  56.         break

  57.     print("请按以下方式提升您的密码安全级别:\n\
  58.     \t1. 密码必须由数字、字母及特殊字符三种组合\n\
  59.     \t2. 密码只能由字母开头\n\
  60.     \t3. 密码长度不能低于16位'")
  61.     break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-2-23 12:39:09 | 显示全部楼层
shuofxz 发表于 2016-2-22 22:40
你这并不是没判断,而是判断多了

按你这么写for each in passwd:,每个字符都会判断一遍,字符有多长, ...

能否就在我的这个程序的基础上进行修改然后实现这个小功能?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-2-23 12:39:40 | 显示全部楼层
hldh214 发表于 2016-2-22 22:36
你看看老师的答案, 不懂的看注释~

能否在我的这个程序上修改实现这个小功能呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-23 18:01:40 | 显示全部楼层
安以陌 发表于 2016-2-23 12:39
能否就在我的这个程序的基础上进行修改然后实现这个小功能?

这有点困难。。。
因为你代码的执行逻辑是有问题的,所以要改的话也得大改
你应该先判断是否含有那三种字符和字符串长度,最后再根据条件输出结果
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-2-23 19:27:50 | 显示全部楼层
shuofxz 发表于 2016-2-23 18:01
这有点困难。。。
因为你代码的执行逻辑是有问题的,所以要改的话也得大改
你应该先判断是否含有那三种 ...

好的,那我改变逻辑试试吧。。谢谢了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-25 10:20:15 | 显示全部楼层
for each in password 是将密码中的每一个字符都判断了一遍
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-25 16:55:43 | 显示全部楼层
观点同8楼一样!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-19 18:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表