Я пытаюсь создать простую регистрационную форму и пароль с помощью словаря. Он отлично работает, кроме той части, где он проверяет, соответствует ли логин паролю (внизу, где указано «Вход в систему успешно!»).Простое имя пользователя и пароль в Python
Если бы я должен был создать логин 'a' и пароль 'b', а затем создать логин 'b' и пароль '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")
Редактировать
Теперь, когда это работает, я пытаюсь разделить приложение на три функции, в целях удобства чтения. Он работает, за исключением того, что я получаю бесконечный цикл.
Любые предложения, почему?
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()
Отъезд [GetPass] (Http: // документы .python.org/2/library/getpass.html) (часть установки Python), чтобы люди не могли видеть пароль по мере его ввода. Затем перейдите к [хеширование] (http://docs.python.org/2/library/hashlib.html), поэтому вам не нужно хранить пароль незашифрованного текста. –
Спасибо за совет :) – 2013-04-06 03:17:06
Попробуйте иметь отдельную функцию для проверки «существующих пользователей», ее хорошей практики программирования. – vivek