2017-03-11 5 views
-2

不正なユーザー名とパスワードを入力したときに正しく機能するスクリプトを作成しましたが、正しい資格情報を入力しても返されます失敗しました。動いているものを試しましたが、解決策を見つけることができませんでした。適切な場所に物事がないのですか、いくつかの最終的なコードがありませんか?機能付きログインスクリプト

loggedin = False 
wrongcount = 0 

def authenticateuser(theusername, thepassword): 
    theusername = "homerjsimpson" 
    thepassword = "marge" 


def main(): 

    username = "" 
    password = "" 


while loggedin == False and wrongcount < 5: 
    username = input("Please enter username: ") 
    password = input("Please enter password: ") 
    if password == authenticateuser and username == authenticateuser: 
     loggedin = True 
    else: 
     print("Authentication Failed") 
     wrongcount = wrongcount + 1 
     loggedin = False 

if(loggedin == True): 
    print("Welcome to the program!") 
else: 
    print("Locked Out") 

main() 
+1

「authenticateuser) 'function do、そしてこのステートメントは何をするのですか?' password == authenticateuserとusername == authenticateuser: ' – thebjorn

+0

私の非常に初心者の理解から、コードが関数なしで実行された場合、' password == thepasswordとusername == theusername'です。しかし、私は 'authenticateuser'関数を作成したので、私は関数を使用するためにそれらを置き換えました。それがクリアされているかどうかは分かりませんか? –

+0

関数をどこで呼びますか?関数は何を返しますか? – thebjorn

答えて

1

authenticateuserは入力パラメータで何かをしなければならず、Trueユーザー名/パスワードが一致する場合はFalseを返します。

さまざまな方法で書き込むことができます。バージョン1:

def authenticateuser(theusername, thepassword): 
    if theusername == "homerjsimpson" and thepassword == "marge": 
     return True 
    else: 
     return False 

は、バージョン2(良い):

def authenticateuser(theusername, thepassword): 
    return theusername == "homerjsimpson" and thepassword == "marge" 

バージョン3(より良い):

def authenticateuser(theusername, thepassword): 
    authentication_db = { 
     # username  # password 
     'homerjsimpson': 'marge', 
    } 
    return authentication_db.get(theusername) == thepassword 

通常、我々は、誰かが私たちにする必要がありますログインしていますログインした状態を追跡します。

class Session: 
    def __init__(self, username=None, loggedin=False): 
     self.username = username 
     self.loggedin = loggedin 

ログイン機能は、現在のユーザ名とパスワードの入力を求めることができ、そしてそれらが正しいかどうかを確認するためにauthenticateuserを呼び出しますのは、(この目的のためにSession)単純なクラスを作成してみましょう。それらが正しくない場合は、不正カウンタを増やします。今メイン

def login(): 
    loggedin = False 
    wrongcount = 0 

    while not loggedin: 
     username = input("Please enter username: ") 
     password = input("Please enter password: ") 

     if authenticateuser(username, password): 
      return Session(username, True) 

     wrongcount += 1 
     if wrongcount > 5: 
      return Session(username, False) 

login()を呼び出し、sessionオブジェクトを取り戻すことができます。私たちは、ユーザ名を含むセッションを返し、ユーザーがログインしているかどうかはいずれの場合も

。このオブジェクトは.loggedinで確認でき、適切なメッセージを印刷できます。ユーザ名が記録されているので、メッセージをパーソナライズすることもできます:

def main(): 
    session = login() 
    if session.loggedin: 
     print("Welcome to the program!", session.username) 
    else: 
     print(session.username, "you've been locked out!") 


main() 
1

パスワードとユーザー名が機能であるかどうかを確認していますが、明らかにそうではありません。私は実際にauthenticateusertheusernamethepasswordを含む辞書を返すといいと思います。このような何か:

def authenticate_user(username, password): 
    return {"username": username, "password": password} 

...

credentials = authenticate_user("homerjsimpson", "marge") 

while logged_in == False and wrong_count < 5: 
    username = input("Please enter username: ") 
    password = input("Please enter password: ") 
    if password == credentials["password"] and username == credentials["username"]: 
     logged_in = True 
    else: 
     print("Authentication Failed") 
     wrong_count = wrong_count + 1 
     loggedin = False 

(サイドノートとして、あなたは変数と関数名の単語を区切るために_を使用する必要があります)

+0

私はまだそのような変数を分離するよう教えられていませんが、具体的な理由があるのでしょうか? –

+0

他のプログラマーがあなたのコードをよく読んで、他のプログラマーのコードをより良く読むことができるように、Pythonのコンベンションです。 – Unlocked

0

あなたが適切に呼び出しされていませんauthenticateuser。このようなものは、あなたが意図したことをするでしょう:

loggedin = False 
wrongcount = 0 

def authenticateuser(theusername, thepassword): 
    if theusername == "homerjsimpson" and thepassword == "marge": 
     return True 
    else: 
     return False 


def main(): 

    username = "" 
    password = "" 


while loggedin == False and wrongcount < 5: 
    username = input("Please enter username: ") 
    password = input("Please enter password: ") 
    if authenticateuser(username, password): 
     loggedin = True 
    else: 
     print("Authentication Failed") 
     wrongcount = wrongcount + 1 
     loggedin = False 

if(loggedin == True): 
    print("Welcome to the program!") 
else: 
    print("Locked Out") 

main() 

編集:また、メインコールは何もしていません。 Pythonコードは行ごとに評価されるので、 "メイン"ループは実際に "while loggedin == False"を実行する場所です。あなたが関数mainを呼び出す時、あなたのプログラムは基本的にすべてを終了し、メインは空の文字列にユーザー名とパスワードを設定しますが、それ以上は何もしません。

関連する問題