所以在我的计算机编程课中,我们的任务是制作通用密码强度检查器,我的工作并正确检查长度,但无论出于何种原因,第二部分无法正常工作,我无法弄清楚原因。
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行,in 对于密码()中的char:
答案 0 :(得分:0)
您可以使用此部分代码修复很多小问题,因此我无法真正告诉您产生不正确输出的原因。
1)肯说:
len(password) != range(6, 12)
将始终返回true。这是因为您要将int与列表进行比较。
range(6, 12)
为您提供[6, 7, 8, 9, 10, 11]
,因此密码的长度永远不会等于该语句。但是,如果使用len(password) in range(6, 12)
,则会将密码的长度与列表中的每个值进行比较,直到匹配为止(如果有)。还有一件事,使用范围(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()
不会成为当前代码中的神奇之物。
可能还有更多我未曾注意到的错误,但这绝对可以帮助您解决问题。
答案 1 :(得分:0)
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()
编辑神圣的死灵!我的错误是小伙子!