|
根据小甲鱼论坛习题 供回顾复习 #Author Vjack symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>''' #在''' 前面加上r 的含义是为了防止被转义 疑问:为什么在特殊字符前面 加''' 而不是' chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' nums = '0123456789' passwd = input('请输入需要检查的密码:') #判断长度 length = len(passwd) #判断输入的是否是密码 while ( passwd.isspace() or length ==0 ):#isspace 是检测字符串是否只由空格组成,若只包含空格返回ture 记得加: passwd = input('您输入的密码为空(或空格),请重新输入:') #先判断长度,并用flag_len 代替 if length <= 8: flag_len = 1
elif 8 < length < 16: flag_len = 2
else: flag_len = 3
#因为在判断是否为高级密码时它有一个要求是:第一个必须是字母,所以加一个判断:先取出passwd的第一个字符串判断是否在chars 中 即可,用的是字符串对象的fing()方法参考网址https://www.cnblogs.com/johnson-yuan/p/7910087.html址https://www.cnblogs.com/johnson-yuan/p/7910087.html 有更好的方法欢迎指教 a = passwd [:1] result =chars.find(a) >= 0 #在最后判断的时候是否是高级密码时加上result,只有当result为true时才是。 #接下来判断存在字母,特殊字符,数字类型有几种 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
#可以打印结果了 while 1: print('您的密码安全级别判定为:',end='')#为什么要加end 草稿有解答。
if flag_len == 1 or flag_con == 1:
print('低')#当程序输出为低级和中级时会执行下面的一个print,提醒你改进方法,在break
elif flag_len ==2 and flag_con >=2: # 用and 两个条件都满足才是中级 print('中') elif flag_len ==3 and flag_con ==3 and result:
print('高')
break#这儿已经跳出了循环,也不再执行下面的print
else:
print('中')#这我想的是一种情况它不满足高级密码必须字母开头,但它有三种类型,大于16位,就输出中级密码
print('请按以下方式进行提升1....2....3.....')#注意这一行的对齐,没有跟while对齐
break
#这条件有点问题啊,高级密码要是没有字母开头怎么办,输出中级密码?
#还有一个注意的就是在if elif else 中else后面不能再添其他条件,要添只能在elif后面 #在pycharm 跑了一遍发现了几个需要注意的问题 1.有时候粘贴过去的它不能run,可能是没对齐 2.上面提到的 else 后面不能在加条件,要加在elif后面加 #原题目
1. # 密码安全性检查代码 2. # 3. # 低级密码要求: 4. # 1. 密码由单纯的数字或字母组成 5. # 2. 密码长度小于等于8位 6. # 7. # 中级密码要求: 8. # 1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合 9. # 2. 密码长度不能低于8位 10. # 11. # 高级密码要求: 12. # 1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合 13. # 2. 密码只能由字母开头 14. # 3. 密码长度不能低于16位
|