5402285zz 发表于 2021-7-2 10:29:59

密码强度问题

小甲鱼老师的方法已掌握,我想知道我写的笨代码问题出在哪里?

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


print('-------密码安全性检查-----------')
passward = input('请输入需要检查的密码组合:')
while len(passward) == 0 andpassward.isspace():
      passward = input('请重新输入密码:')


if (len(passward) <= 8) or (passward.isalnum()):
      print('您的密码安全级别评定为:低')
      print('请按以下方法提升您的密码安全级别')
      print('1.密码必须由数字、字母及特殊字符三种组合')
      print('2.密码只能由字母开头')
      print('3.密码长度不能低于16')
for each in passward:
      if (16>len(passward) > 8) and (((each in symbols) and (each in number)) or ((each in symbols) and (each in chars)) or ((each in number) and (each in chars))):
            print('您的密码安全级别评定为:中')
            print('请按以下方法提升您的密码安全级别')
            print('1.密码必须由数字、字母及特殊字符三种组合')
            print('2.密码只能由字母开头')
            print('3.密码长度不能低于16')
            break
      elif (each in symbols) and (each in chars) and (each in number) and len(passward) >= 16 and passward.isalpha():
            print('您的密码安全级别评定为:高')
            print('请继续保持')
            break

我个人理解的是我用for循环,是选取迭代对象里的一个元素进行判断,所以无法满足既是数字也是特殊符号,所以该程序无法识别高级和中级密码,请老师们帮忙分析指正其他错误.

灰晨 发表于 2021-7-2 10:59:44

本帖最后由 灰晨 于 2021-7-2 11:07 编辑

passward.isalnum()这个是判断数字和字母的,不仅仅只判断数字
这个,全是数字,或全是字母,或既有数字和字母,都是符合的
emmmmm,也可能你就是设定<=8和只含数字和字母,密码强度为低
不过从((each in number) and (each in chars))这个代码来看,虽然这个代码是错的
不过明显你将既含数字和字母归到密码强度中了,而passward.isalnum()这个也通过
所以,就算你循环那里没错,也会出现一个既含数字和字母的8位以上16位以下的密码会既是低强度也是中强度

break的用法也跟你的思路冲突了
for循环,是选取迭代对象里的一个元素进行判断
你这样写就只判断了密码的第一个字符,就直接break跳出循环了,第二个字符根本管都不管的


str为字符串
1、str.isalnum() 所有字符都是数字或者字母
2、str.isalpha() 所有字符都是字母
3、str.isdigit() 所有字符都是数字
4、str.islower() 所有字符都是小写
5、str.isupper() 所有字符都是大写
6、str.istitle() 所有单词都是首字母大写
7、str.isspace() 所有字符都是空白字符、\t、\n、\r

5402285zz 发表于 2021-7-2 13:23:20

灰晨 发表于 2021-7-2 10:59
passward.isalnum()这个是判断数字和字母的,不仅仅只判断数字
这个,全是数字,或全是字母,或既有数字和 ...

有道理,感谢
页: [1]
查看完整版本: 密码强度问题