Python 密码检查器未返回true
我写了一个密码检查器来检查密码的安全性。有三个功能可以检查安全性并返回值,弱、中等和强。我在这里调用函数:Python 密码检查器未返回true,python,if-statement,for-loop,Python,If Statement,For Loop,我写了一个密码检查器来检查密码的安全性。有三个功能可以检查安全性并返回值,弱、中等和强。我在这里调用函数: if check_pass_strength_weak(password): print "Weak" elif check_pass_strength_medium(password): print "Medium" elif check_pass_strength_strong(password):
if check_pass_strength_weak(password):
print "Weak"
elif check_pass_strength_medium(password):
print "Medium"
elif check_pass_strength_strong(password):
print "Strong""
但坚强永远不会回来。下面是函数
def check_pass_strength_strong(password):
upper_count = 0
lower_count = 0
number_count = 0
for letter in password:
if letter == letter.upper():
upper_count = upper_count + 1
elif letter == letter.lower():
lower_count = lower_count + 1
elif letter.isalpha():
number_count = number_count + 1
if upper_count > 0 and lower_count > 0 and number_count > 0:
return True
你的问题是:
'1' == '1'.upper()
因此,elif
的其余部分永远不会运行,number\u count
永远不会递增。把它翻过来:
if letter.isdigit():
...
elif ...
或者,最好实际使用Python,并记住返回False
:
def check_pass_strength_strong(password):
upper_count = 0
lower_count = 0
number_count = 0
for letter in password:
if letter.isdigit():
number_count += 1
elif letter.isupper():
upper_count += 1
elif letter.islower():
lower_count += 1
if upper_count > 0 and lower_count > 0 and number_count > 0:
return True
return False
事实上,当您检查多个级别时,您可以计算出计数:
def count_char_types(password):
lower_count = upper_count = number_count = 0
for letter in password:
if letter.isdigit():
number_count += 1
elif letter.isupper():
upper_count += 1
elif letter.islower():
lower_count += 1
return lower_count, upper_count, number_count
然后实施例如
def check_pass_strength_strong(password):
l, u, n = count_char_types(password)
return l > 0 and u > 0 and n > 0
并考虑添加<代码>符号计数< /代码>! 您的代码需要两个修复程序。首先,如中所述,
'1'='1'。您需要首先验证这一点:
if letter.isdigit():
#...
elif #upper/lower conditions
并且您可能希望更改密码强度的条件:
if check_pass_strength_strong(password):
print "Strong"
elif check_pass_strength_medium(password):
print "Mediu"
elif check_pass_strength_weak(password):
print "Weak"
使用正则表达式检查数字/大写/小写字符怎么样
e、 g:
您不应该缩进elif语句您没有提供其他方法,但这可能是因为您的逻辑暗示“password is strong=>password is medium”和“password is strong=>password is weak”。因此,对于强密码,您的第一个方法也返回true
,并且不检查进一步的条件。您的媒体可能总是返回true。如果不是有3个函数,而是有一个函数返回密码强度,那么可能会更简单。当您希望密码强度高时,会返回什么?无密码、弱密码或中等密码?强密码也可能是中等密码
def check_pass_strength_strong(password):
return all((re.findall(r'[A-Z]', password),
re.findall(r'[a-z]', password),
re.findall(r'[0-9]', password)))