尝试创建一个函数来验证密码而不使用re或main(),并将返回true或false

2024-10-04 11:26:25 发布

您现在位置:Python中文网/ 问答频道 /正文

def isValidPassword(pw):  
    SpecialSymbol = ["@", "#", "$", " ", "&", "%"]
    val = True   
    
    if len(pw) < 10:
        print("enter at least 10 characters")
        val = False
        
    if not any(char.isdigit(3) for char in pw):
        print("enter at least 3 digit numbers")
        val = False
        
    if not any(char.isupper() for char in pw):
        print("enter at least 1 uppercase letter")
        val = False
        
    if not any(char.islower() for char in pw):
        print("enter at least 1 lowercase letter")
        val = False
        
    if not any(char in SpecialSymbol for char in pw):
        print("enter at least 1 special character")
        val = False
    if val:    
        return val
        
    if (isValidPassword(pw)):
        print(True)    
    else:
        print(False)       
print(isValidPassword("1234rewq"))

它返回[TypeError:str.isdigit()不接受任何参数(给定1)],我不知道为什么 抱歉,我刚开始学习,参考了一些我能找到的资料,但我真的不知道我在做什么


Tags: infalseforifnotanyvalat
2条回答

在函数isdigit()上使用sum而不是any()

试试这个:

def isValidPassword(pw):  
    SpecialSymbol = ["@", "#", "$", " ", "&", "%"]
    val = True   
    
    if len(pw) < 10:
        print("enter at least 10 characters")
        val = False
        
    if sum(char.isdigit() for char in pw) < 3:
        print("enter at least 3 digit numbers")
        val = False
        
    if not any(char.isupper() for char in pw):
        print("enter at least 1 uppercase letter")
        val = False
        
    if not any(char.islower() for char in pw):
        print("enter at least 1 lowercase letter")
        val = False
        
    if not any(char in SpecialSymbol for char in pw):
        print("enter at least 1 special character")
        val = False
    if val:    
        return val
        
if (isValidPassword("1234rewq")):
    print(True)    
else:
    print(False)       

就像返回的错误试图告诉您的一样,isdigit()方法不接受任何参数。正确的使用方法是char.isdigit(),该方法将检查您的“char”是否为数字,如果为True,则返回False。但是在您的例子中,您提供了一个整数3作为该方法的参数,而该方法不需要这样做

你可以试试@user1740577的建议

相关问题 更多 >