2016-11-17 170 views
-1
def IsValidLogin(login_name): 
    lognum = 0 
    login = 0 

    if len(login_name) >= 8: 
    lognum == True 
    elif len(login_name) < 8: 
    lognum == False 


    for chr in login_name: 
    if chr.isalnum() == True: 
     login == True 
    else: 
     login == False 

    if (login == True) and (lognum == True): 
    IsValidLogin == True 
    else: 
    IsValidLogin == False 

    if IsValidLogin == True: 
    print('Login Accepted') 
    else: 
    print('Login Failed') 

    return lognum, login 


login_name = input('Please enter your Login: ') 
lognum, login = IsValidLogin(login_name) 

def IsValidPassword(password): 
    pass_char = ['!','@','#','$','%','^','&','*','(',')','_','+'] 

    pass_len = 0 
    pass_num = 0 
    spec_char = 0 

    for chr in password: 
    if len(password) >= 8: 
     pass_len == True 
    elif len(password) < 8: 
     pass_len == False 

    for chr in password: 
    if chr.isdigit() == True: 
     pass_num == True 
    elif chr.isdigit() == False: 
     pass_num == False 

    for chr in password: 
    if password == pass_char: 
     spec_char == True 
    elif password != pass_char: 
     spec_char == False 

    if (pass_len == True) and (spec_char == True): 
    IsValidPassword == True 
    else: 
    IsValidPassword == False 

    if IsValidPassword == True: 
    print('Password Accepted') 
    else: 
    print('Password Failed') 

    return pass_len, pass_num, spec_char 

password = input('Please enter your password: ') 
pass_len, pass_num, spec_char = IsValidPassword(password) 

登录名至少需要8个字符并且只能包含字母和数字。验证登录名和密码

密码长度必须至少为8个字符,至少包含一个数字和一个特殊字符。

程序运行,但都返回false。

想知道我做错了什么。请记住我是Python新手。

回答

0

的线条:

if len(login_name) >= 8: 
    lognum == True 
    elif len(login_name) < 8: 
    lognum == False 

似乎错了。看起来好像你正在尝试分配到lognum,而你正在比较lognumTrueFalse=是赋值,==是比较。类似为:

if chr.isalnum() == True: 
    login == True 
else: 
    login == False 

if (login == True) and (lognum == True): 
    IsValidLogin == True 
    else: 
    IsValidLogin == False 

和功能外其他几个地方。

只要将相应的==更改为=它应该工作。

您还可以在密码部分逻辑问题,即使有这样的变化:这将始终返回false,因为它只检查的最后一个字符,不能同时是数字和特殊字符。

for chr in password: 
    if chr.isdigit() == True: 
     pass_num = True 
    elif chr.isdigit() == False: 
     pass_num = False #On the last pass through, this overwrites the previous value 

    for chr in password: 
    if password == pass_char: 
     spec_char = True 
    elif password != pass_char: 
     spec_char = False #On the last pass through, this overwrites the previous value 

变化elif password != pass_char:elif not spec_char:elif chr.is_digit():elif not pass_num:从被覆盖保持这一点。