根据小甲鱼论坛习题
供回顾复习
#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位