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)))