2017-05-13 13 views
0

で値をどのように適合するように対応してペア:私は複数の(ユーザー名、パスワード)を持つ.txtファイルを持っている辞書のpythonのユーザ名・パスワード

jack : ace 

私は、ユーザー入力自分の名前とパスワードを聞かせするためのコードを書きました、およびデータベースでこれらを確認します。

data={} 
with open("user.txt", "r") as f: 
for line in f.readlines(): 
    name,password = line.strip().split(":") 
    data[str(name)]=str(password) 

counter = 3 
while True: 
    print "Log In" 
    username = raw_input ("Username : ").lower() 
    pword = raw_input ("Password : ").lower() 

    for username in data: 
     if data[name] == password : 
      print "Welcome Misterrr" 
      break 
     if data[username] != password : 
      print "Boo Boo .Suckerr!!" 
      counter = counter - 1 
    if counter == 0: 
     print "Limit try reached already.Bye!" 
     break 

を問題は、ユーザーの入力ユーザー名とパスワードの後に​​、コードがループに従わないだろう、それは壊れていないということであり、それはないと思われます実際にはユーザーの入力値を辞書値と一致させます。これをどうすれば解決できますか?

答えて

0

あなたは2つの主要な問題を抱えて:

  • まず、あなたは本当に...、ユーザによって入力された値を使用していない:あなたはループのために入力したときusernameが上書きされ、そしてpwordが呼び出されることはありません創造後。

  • 第2に、ログインが成功したときに使用するbreakは、forループからではなく、whileループから壊れます。

固定論理:

counter = 3 
done = False 

while done is False: 
    print "Log In" 
    username = raw_input ("Username : ").lower() 
    pword = raw_input ("Password : ").lower() 

    # Check if the user exists in the database or not 
    if username not in data.keys(): 
     print "Never seen this name before!..." 
     counter = counter - 1 
    else: 
     # Check if the input password matches the database password 
     if data[username] == pword : 
      print "Welcome Misterrr" 
      done = True 
     else: 
      print "Boo Boo .Suckerr!!" 
      counter = counter - 1 
    if counter == 0: 
     print "Limit try reached already.Bye!" 
     break 
+1

はlot.Iが今よりよく理解して、私を助けます。 – JackAce

+0

素晴らしい!あなたの問題を解決した場合、あなたは答えを受け入れることができます:) http://stackoverflow.com/help/someone-answers – Josselin

関連する問題