|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
所有的问题我都注释在代码里了,比较啰嗦,最后也有总结存疑,希望大佬不要嫌我笨~嘤嘤嘤 不知道自己到底哪里想错了,总觉得答案和题目对不上
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
passwd = input('请输入需要检查的密码组合:')
# 判断长度
length = len(passwd)
while (passwd.isspace() or length == 0) :
passwd = input("您输入的密码为空(或空格),请重新输入:")
# 不能用if:因为如果用户输入密码为空时,让其重新输入一次就过了,而while是如果密码一直为空就一直重填
if length <= 8:
flag_len = 1
elif 8 < length < 16:
flag_len = 2
else:
flag_len = 3
flag_con = 0
# 判断是否包含特殊字符
for each in passwd:
if each in symbols:
flag_con += 1
break
# 判断是否包含字母
for each in passwd:
if each in chars:
flag_con += 1
break
# 判断是否包含数字
for each in passwd:
if each in nums:
flag_con += 1
break
# 打印结果
# 疑问:为什么要用循环?
# 回答:当安全等级为高时,break直接跳出循环,不打印提高等级的方法,
# 当等级为中,低时打印提高等级的方法,然后再跳出循环
while 1 :
print("您的密码安全级别评定为:", end='')
if flag_len == 1 or flag_con == 1 :
# <=8的 或者 全部为字母/数字/符号 被判定为低
# 疑问:只满足<=8、全部为字母/数字/符号且>8,不符合低级的要求,也被判定为低
# 疑问:低级的两个要求是要同时满足还是满足其一即可判定?
# 疑问:为什么字母+数字(flag_con == 2)也可以判定为低?
# 个人理解:从代码解释,低级的两个要求满足其一即可判定,所以用or连接,
# 当只有字母+数字时,若<=8判定为低;>8则同时符合中级的两个条件
print("低")
elif flag_len == 2 or flag_con == 2 :
# 疑问:为什么用or连接?中级的要求一中使用了“必须”,所以要求一必须满足,即必须两种组合
# 个人理解:只满足 <=8 、 全部为字母/数字/符号 会直接先被判定为低,
# 所以进入这一层的必定满足 >8 且 不全部为字母/数字/符号(即不单一,即两种或三种组合),
# 因此条件二>8已经符合,那么规定flag_con == 2限制为两种组合,即可同时满足中级的两个条件,
# 由此看来,中级需要同时满足两个条件才可判定,>8的条件是else天然形成,只需人为增加两种组合的条件
# 疑问:如果进入这一层的必定满足 >8,那么flag_len == 2有什么意义?
# 难道是为了使下一层天然满足>=16?那为什么不省略这个语句,而在下一层直接增加>=16的条件?
# 疑问:>8<16 且 三种组成,题目没有定义,代码运行为中级
print("中")
else :
# 高级最复杂,直接放在最后else,但出现很多问题
# 个人理解:高级的要求一中使用了“必须”,要求二中使用了“只能”,所以要求一和要求二必须满足
# 进入这一层的必定满足 >=16 且 为三种组合,已经满足了要求三和要求一,
# 所以这里应该增加一个只能由字母开头的条件来限制要求二,才能满足三个要求
# 疑问:为什么不写上只能由字母开头的要求?没有限制“只能”由字母开头,若不是由字母开头依然判定为高
print("高")
print("请继续保持")
break
print("请按以下方式提升您的密码安全级别:\n\
\t1. 密码必须由数字、字母及特殊字符三种组合\n\
\t2. 密码只能由字母开头\n\
\t3. 密码长度不能低于16位")
break
**总结:**
密码的判定涉及两个条件,密码的长度和密码的组成。
低级:<=8 **或** 一种(自己理解为“或”)
中级:>8 且 两种组合
高级:>=16 且 三种组合 且 **字母开头** (自己认为代码缺少)
(这样的题目规定可基本符合代码运行的结果)
**存疑!!!**
**1. 低级的两个要求到底是满足其一即可还是必须满足两个才可以判定?**
**2. 如果进入第二层的必定满足 >8,那么flag_len == 2有什么意义?**
**3. >8<16 且 三种组合 上述方法没有定义,题目没有定义,代码运行为中级**
**4. 第三层为什么不写上只能由字母开头的要求?** |
|