首页 > 解决方案 > 该变量在我的方法中设置为 false,一旦方法运行,它应该更改为 True。但它没有

问题描述

def checkPassword (password):
    
    upper = False
    lower = False
    number = False
    special = False
    
    for i in range (len(password)):
        if ((ord(password[i]) >= 65) and (ord(password[i]) <= 90)):
            upper = True    
        elif ((ord(password[i]) >= 97) and (ord(password[i]) <= 122)):
            lower = True    
        elif ((ord(password[i]) >= 0) and (ord(password[i]) <= 9)):
            number = True   
        elif ((ord(password[i]) >= 0) and (ord(password[i]) <= 9)) :
            special = True
            
    
    if ((upper == True) and (lower == True) and (number == True) and (special == True)):
        print ("Your password is strong")
    else:
        print ("Your password is not strong. Make sure to make it a mix between upper and lower case letters, number, and special characters.")

def main():
    password = input("Enter a password: ")
    checkPassword (password)

输入:

running99*FAST

输出:

Your password is not strong. Make sure to make it a mix between upper and lower case letters, number, and special characters.

问题:这个密码应该作为强密码返回,但它没有。老实说,我不知道我做错了什么。

PS 我正在使用 ASCII 表来识别字母是小写、大写还是数字以及特殊字符。

标签: pythonvariablesboolean

解决方案


您的电话号码和特别支票无效。所以我用isdigit()数字代替。另外,什么是特殊字符?如果特殊字符不是小写/大写字符和数字,那么else最后应该没问题。

upper = False
lower = False
number = False
special = False

password = "running99*FAST"

for i in range (len(password)):
    if ((ord(password[i]) >= 65) and (ord(password[i]) <= 90)):
        upper = True    
    elif ((ord(password[i]) >= 97) and (ord(password[i]) <= 122)):
        lower = True    
    elif password[i].isdigit():
        number = True   
    else:
        special = True
        
print (upper,lower,number,special)
if ((upper == True) and (lower == True) and (number == True) and (special == True)):
    print ("Your password is strong")
else:
    print ("Your password is not strong. Make sure to make it a mix between upper and lower case letters, number, and special characters.")

输出:

True True True True
Your password is strong

对于正则表达式版本:

import re

password = "running99*FAST"

def check(password):
    for test in [('lower','[a-z]'),('upper','[A-Z]'),('number','[0-9]'),('special','[^A-Za-z0-9]')]:
        if len(re.sub(test[1],"",password)) == len(password):
            return False, test[0]
    else: return True

print (check(password))

如果正则表达式替换后的长度等于替换前的长度(意味着不存在字符类型),此代码将返回 False。一次违规返回。

以及报告多次违规的 oneliner:

import re

password = "runnFAST"

def check(password):
    return [(False, t[0]) if len(re.sub(t[1],"",password)) == len(password) else (True, t[0]) for t in [('lower','[a-z]'),('upper','[A-Z]'),('number','[0-9]'),('special','[^A-Za-z0-9]')]]

print (check(password))

输出:

[(True, 'lower'), (True, 'upper'), (False, 'number'), (False, 'special')]

推荐阅读