辞書を使用して簡単なログインとパスワードアプリケーションを構築しようとしています。それは、ログインがパスワードと一致するかどうかをチェックする部分を除いて正常に機能します(下部に「ログインに成功しました!」)。Pythonでの単純なユーザー名とパスワードのアプリケーション
ログイン 'a'とパスワード 'b'を作成し、ログイン 'b'とパスワード 'a'を作成すると、ログイン 'a'とパスワードでログインしようとするとログインします'a'。これらの文字が辞書のどこかに存在するかどうかをチェックしますが、それがペアであるかどうかはチェックしません。
これを修正する方法を教えてください。
users = {}
status = ""
while status != "q":
status = raw_input("Are you a registered user? y/n? Press q to quit: ")
if status == "n": #create new login
createLogin = raw_input("Create login name: ")
if createLogin in users: # check if login name exist in the dictionary
print "Login name already exist!\n"
else:
createPassw = raw_input("Create password: ")
users[createLogin] = createPassw # add login and password
print("\nUser created!\n")
elif status == "y": #login the user
login = raw_input("Enter login name: ")
if login in users:
passw = raw_input("Enter password: ")
print
if login in users and passw in users: # login matches password
print "Login successful!\n"
else:
print
print("User doesn't exist!\n")
編集
さて、これが動作していることを、私は読みやすさのために、三つの機能にアプリケーションを分割しようとしています。私は無限のループを得ることを除いて、それは動作します。
どのような理由がありますか?
if users[login] == passw: # login matches password
へ
users = {}
status = ""
def displayMenu():
status = raw_input("Are you a registered user? y/n? Press q to quit: ")
if status == "y":
oldUser()
elif status == "n":
newUser()
def newUser():
createLogin = raw_input("Create login name: ")
if createLogin in users: # check if login name exists
print "\nLogin name already exist!\n"
else:
createPassw = raw_input("Create password: ")
users[createLogin] = createPassw # add login and password
print("\nUser created!\n")
def oldUser():
login = raw_input("Enter login name: ")
passw = raw_input("Enter password: ")
# check if user exists and login matches password
if login in users and users[login] == passw:
print "\nLogin successful!\n"
else:
print "\nUser doesn't exist or wrong password!\n"
while status != "q":
displayMenu()
.python.org/2/library/getpass.html)ライブラリ(Pythonインストールの一部)を使用して、入力時にパスワードが表示されないようにします。その後、[ハッシュ](http://docs.python.org/2/library/hashlib.html)に移動して、平文のパスワードをこれまで保存する必要はありません。 –
アドバイスありがとう:) –
「既存のユーザー」を確認するための別の機能を持つようにしてください。その優れたプログラミング方法です。 – vivek