2016-11-17 11 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文字以上で、少なくとも1つの数字と1つの特殊文字が必要です。

プログラムは実行されますが、両方とも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 not spec_char:からelif password != pass_char:elif not pass_num:からelif chr.is_digit():が上書きされ、これを維持します。

関連する問題