ghser 发表于 2020-5-25 17:40:58

密码强度检验问题,虽然已经搜索过论坛,但还有一些不解,求求大佬帮助

number = "0123456789"
letter = "abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
symbool = r"~!@#$%^&*()_=-/,.?\\<>;:[]{}|"
x = 0
y = 0
z = 0
while True:
    passwd = input("请输入密码:")
    length =len(passwd)
    while(passwd.isspace()or length == 0):
      passwd=input("您输入的密码为空,请重新输入:")
    if length <= 8 and (passwd.isdigit() or passwd.isalpha()):
      print("这是一个低级密码")
      break
      continue
    if length > 8:
      for each in passwd:
            if each in number:
                x += 1
                break
      for each in passwd:
            if each in letter:
                y += 1
                break
      for each in passwd:
            if each in symbool:
                z += 1
                break
    if x + y + z == 2:
      print("这是一个中级密码")
      break
      continue
    n = 1 if passwd in letter else 0
    if x + y + z == 3 and length >= 16 and n:
      print("这是一个高级密码")
      continue
      
    print("无法识别,不属于三种密码中任何一种!!!")






运行后,如果第一遍密码输入为空,此后再输入密码,有时会返回无法识别,不属于三种密码中的一种,
还有,在验证过一次密码强度后,需要重启程序,不知道该怎么处理,是我缩进的问题吗?希望各位大佬帮忙解答一下

Twilight6 发表于 2020-5-25 17:49:12

本帖最后由 Twilight6 于 2020-5-25 19:07 编辑

运行后,如果第一遍密码输入为空,此后再输入密码,有时会返回无法识别,不属于三种密码中的一种,
如果你输入空格 因为你值判定一次 length =len(passwd) 长度 在 while 循环里没有重新给予 赋值 导致
while(passwd.isspace()or length == 0)条件里的 length == 0 一直成立 死循环 ,需要在循环下加上重新判断length length = len(passwd)
在验证过一次密码强度后,需要重启程序,不知道该怎么处理,是我缩进的问题吗?
因为你在 continue 前面加上了 break退出循环
还有个地方可以去掉:
number = "0123456789"
letter = "abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
symbool = r"~!@#$%^&*()_=-/,.?\\<>;:[]{}|"
x = 0
y = 0
z = 0
while True:
    passwd = input("请输入密码:")
    length = len(passwd)
    while (passwd.isspace() or length == 0):
      passwd = input("您输入的密码为空,请重新输入:")
      length = len(passwd)
    iflength <= 8 or passwd.isdigit() or passwd.isalpha():
      print("这是一个低级密码")
      continue
    elif length > 8:
      for each in passwd:
            if each in number:
                x += 1
                break
      for each in passwd:
            if each in letter:
                y += 1
                break
      for each in passwd:
            if each in symbool:
                z += 1
                break
    if x + y + z > 1 and length < 16:
      print("这是一个中级密码")
      continue
    if x + y + z == 3 and length >= 16 :
      print("这是一个高级密码")
      continue

    print("无法识别,不属于三种密码中任何一种!!!")

ghser 发表于 2020-5-25 20:02:30

Twilight6 发表于 2020-5-25 17:49
如果你输入空格 因为你值判定一次 length =len(passwd) 长度 在 while 循环里没有重新给予 赋值 导致
...

如果我想表达中级密码是字母,数字和特殊符号间两两任意组合要怎么写这句话啊,大佬

Twilight6 发表于 2020-5-25 20:06:09

ghser 发表于 2020-5-25 20:02
如果我想表达中级密码是字母,数字和特殊符号间两两任意组合要怎么写这句话啊,大佬

按你原本那样可以丫 x + y + z == 2
只是你其他地方要多改动,因为改了这个漏洞了部分
页: [1]
查看完整版本: 密码强度检验问题,虽然已经搜索过论坛,但还有一些不解,求求大佬帮助