抱歉,我正在尝试在python 3.2上编写代码以进行密码强度检查,但看起来我一直在收到错误。每当我输入#$%$ J时,将进入if input.upper()为true。我该如何防止这种情况发生?我的分数值不准确。 编码:
password_user = input("Input password : ")
score = 0
if len(password_user) <=5:
print("Password is too short! ")
score = 1
elif password_user == password_user.lower():
print("Bad Password")
score = 1
elif password_user == password_user.upper():
print("Bad Password")
score = 1
else:
while score == 0:
for x in range(33,48):
ascii_str = chr(x)
if password_user.find(ascii_str) >= 0:
score = score + 3
for y in range(97,123):
ascii_lower = chr(y)
if password_user.find(ascii_lower) >= 0:
score = score + 1
for w in range(65,91):
ascii_upper = chr(w)
if password_user.find(ascii_upper) >= 0:
score = score + 2
for z in range(48,58):
ascii_num = chr(z)
if password_user.find(ascii_num) >= 0:
score = score + 2
if score >0 | score <=5:
print("Weak Password")
print(score)
elif score > 5 | score < 7:
print("Medium Password")
print(score)
elif score >= 7:
print("Strong Password")
print(score)
答案 0 :(得分:1)
首先,它应该是,例如,find(ascii_str)&gt; -1(因此计算字符编号0)。 我假设你的意思是每个字符范围最多给一次分数奖励。因此,这样的事情是恰当的:
contain = false
for x in range(33,48):
ascii_str = chr(x)
if password_user.find(ascii_str) > -1:
contain = true
if contain:
score += 3
和其他人一样。
编辑: 问题并不清楚是否希望每个不同的角色增加分数,为每个角色增加分数,或仅为每种类型的角色增加分数。 鉴于您的任何分数大于6的指标都很强,任何不返回“密码太短”或“密码错误”的指标都会很强(它至少有6个字符,至少有一个大写字母,已经给7分)除非你有很多重复的字母。如果你真的希望每个新角色都能提高分数,你应该更改指标(可能是12个或更多是一个强密码吗?),虽然在我看来,只增加每种类型角色的分数更有意义,然后按长度增加分数,或类似的东西。