[英]Python Password Checker Help Debugging
因此,在我的计算机编程课程中,我们的任务是制作通用密码强度检查器,我的工作正常并正确检查长度,但无论出于何种原因,第二部分无法正常工作,我无法弄清楚原因。
password = input("Please enter a password between 6 - 12 characters long: ")
while len(password) in range(6, 13) == False:
if len(password) < 6:
print("Password too low!")
password = input("Please enter a password between 6 - 12 characters long: ")
elif len(password) > 12:
print("Password too high!")
password = input("Please enter a password between 6 - 12 characters long: ")
Upper = 0
Lower = 0
Numerical = 0
for char in password:
if char == char.isupper():
Upper = Upper + 1
elif char == char.islower():
Lower = Lower + 1
elif char == char.isnumeric():
Numerical = Numerical + 1
Strength = int(Upper + Lower + Numerical)
if Strength == 1:
print("Password is weak!")
elif Strength == 2:
print("Password is medium!")
elif Strength == 3:
print("Password is strong!")
任何帮助将不胜感激,我浏览了其他类似的问题,但有一些具体的问题有点困难。
编辑:从我的 while 循环中删除括号不会做任何事情,无论如何它的工作原理是一样的。 范围内部分没有区别,我仍然收到错误:
回溯(最近一次调用):文件“C:\\Users\\Owen\\Desktop\\Password Checker.py”,第 21 行,在密码()中的字符中:
您可以使用这部分代码修复很多小问题,因此我无法真正告诉您是什么导致了不正确的输出。
1) 正如肯所说:
len(password) != range(6, 12)
将始终返回 true。 这是因为您正在将 int 与列表进行比较。
range(6, 12)
为您提供[6, 7, 8, 9, 10, 11]
因此密码的长度永远不能等于该语句。 但是,如果您len(password) in range(6, 12)
使用len(password) in range(6, 12)
的长度将与列表中的每个值进行比较,直到匹配为止(如果有)。 还有一件事,使用 range(a, b) 只包括从 a 到 b-1 的数字。 所以你真的想要: len(password) in range(6, 13)
2) while 循环的逻辑应该随着我第一点的变化而变化。 如果len(password) in range(6, 13)
计算结果为 True,则 while 语句将不会循环,您将进入下一部分。 您可以删除else
部分并将您的elif
更改为else
。
3) 你可以去掉LengthLow
和LengthHigh
因为你没有在任何地方使用它们。
4) 密码是一个字符串,所以你不能用 () 运算符调用它。 你的 for 循环应该是for char in password:
5) 使用char.isupper()
、 char.islower()
或char.isnumeric()
来检查它们是否是数值
6) 您不需要分别存储Upper
、 Lower
和Numerical
因为无论如何您只是在最后将它们加在一起。 如果您熟悉列表推导式,您实际上可以使用单行代码完成此操作
strength = sum([1 if c.isupper() or c.islower() or c.isnumeric else 0 for c in password])
虽然,在我看来,这与字母数字的 c.isalnum() 完全相同。 所以写,
strength = sum([1 if c.isalnum() else 0 for c in password])
7)我对密码强度计算一无所知,但我认为也应该考虑特殊字符。 在这种情况下, c.isalnum()
不会像您当前的代码那样成为一体的魔法。
可能还有更多我没有注意到的错误,但这绝对可以帮助您解决问题。
ero1ca 的回答解释了许多问题。
至于代码的最后一部分不起作用,那是因为您遍历密码中的每个字符,并根据该字符的内容递增。 如果强制长度大于 3,您最后的条件语句将不会覆盖密码!
下面是代码的修订版。
password = input("Please enter a password between 6 - 12 characters long: ")
while not len(password) in range(6, 13):
if len(password) < 6:
print ("Password too low!")
else:
print ("Password to high!")
password = input("Please enter a password between 6 - 12 characters long: ")
Upper = 0
Lower = 0
Numerical = 0
if any(x.isupper() for x in password):
Upper = 1
if any(x.islower() for x in password):
Lower = 1
if any(x.isdigit() for x in password):
Numerical = 1
Strength =int(Upper + Lower + Numerical)
if Strength == 1:
print ("Password is weak!")
elif Strength == 2:
print ("Password is medium!")
else:
print ("Password is strong!")
在 python 2.7 中使用 raw_input 而不是 input()
编辑神圣的死灵! 我的错误小伙子们!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.