#python
#python
Вопрос:
Я кодирую себе «простую» систему входа в систему, все работает нормально вплоть до LOGIN
части.
while
Цикл в конце происходит только один раз, даже если я ввел другого пользователя, а не то, что я создал при запуске программы. В какой-то момент я заставил ее работать, но затем возникла другая проблема, из-за которой while
цикл повторялся снова и снова.
import re
users = {}
status = ""
while status != "r":
status = input("Press R to register!n")
if status == "r":
createUser = input("Create your Username: ")
while len(createUser)< 5: #checks user len
print("Username should contain at least 5 characters!")
createUser = input("Create your Username: ") #repeat if user len < 5
while not re.match("^[a-z]*$" , createUser): # denies blank spaces
print("Cannot use blank spaces")
createUser = input("Create your Username: ")
if createUser in users:
print("Username already used!")
else:
createPass = input("Create your Password: ")
while len(createPass) < 5: #checks pass len
print("Password too short!n Password should contain at least 5 characters!n")
createPass = input("Create your Password: ") #repeat if pass len < 5
while not re.match("^[a-z]*$", createPass): # denies blank spaces
print("Cannot use blank spaces")
createPass = input("Create your Password: ")
else:
users[createUser] = createPass #adds user and pass to users
print("User created!")
#LOGIN
for createUser in users:
username = input("Username: ")
if username == createUser in users:
password = input("Password: ")
else:
while username != createUser:
print("User unregistered! Please register!")
createUser = input("Create your Username:")
Комментарии:
1. Что
if username == createUser in users:
предполагается делать2. PS:
m a noob , criticise everything you see I
Я сделал неправильно, я действительно хочу больше изучать python. Спасибо!3. Я надеялся, что он проверит, совпадает ли записанное имя пользователя с тем, которое было создано ранее, и, если оно есть, перейдите к вводу пароля..
4. Попробуйте добавить . перейдите к вашей переменной во входной переменной,
status = input("Enter 'R' to register: ").lower()
.5. Попробуйте разбить свой код на функции. Вам очень редко нужно использовать три уровня отступов.
Ответ №1:
Во-первых, "^[a-z]*$"
тесты не содержат строчных букв, это не означает «нет пробелов», поэтому я исправил это для вас с помощью "\s "
Вам действительно нужно узнать о методах и разбить вашу проблему.
1) Запросите имя пользователя
def get_username():
while True:
uname = input("Create your Username: ")
if len(uname) < 5:
print("Username should contain at least 5 characters!")
continue
if re.search("\s ", uname):
print("Cannot use blank spaces")
continue
break # input successful
return uname
2) Запросить пароль
def get_password():
while True:
passwd = input("Create your Password: ")
if len(passwd) < 5:
print("Password too short!ntPassword should contain at least 5 characters!n")
continue
if re.search("\s ", passwd):
print("Cannot use blank spaces")
continue
break # input successful
return passwd
3) Регистрация
def register():
while True:
uname = get_username()
if uname not in users:
break # continue to get password
else:
print("Username already used!")
passwd = get_password()
if passwd:
users[uname] = passwd
print("User created!")
4) Попытка входа в систему (максимум 3 попытки). В настоящее время неясно, как вы хотите это запустить…
def login():
for i in range(3):
username = input("Username: ")
if username in users:
password = input("Password: ")
if users[username] != password:
print("Wrong username or password")
else:
print("User does not exist")
else:
print("Max attempts reached")
5) (необязательно) Узнайте о D.R.Y, поскольку ваши тесты по сути одинаковы
def test_input(s):
if len(s) < 5:
print("Input should contain at least 5 characters!")
return False
if re.search("\s ", s):
print("Cannot use blank spaces")
return False
return True
6) Запустите некоторый код, который использует все эти методы.
status = input("Press R to register!n")
if status.lower() == "r":
register()
Комментарии:
1. Ха-ха, мы опубликовали ответ одновременно 😉
2. @MateenUlhaq я заметил 🙂
Ответ №2:
Попробуйте это:
def login():
username = input("Username: ")
if username not in users:
print("User unregistered! Please register!")
register()
return
password = input("Password: ")
if users[username] != password
print("Password invalid")
Я переписал ваш код здесь. Обратите внимание, как я разбил его на функции, которые выполняют одну вещь:
- usernameValidator
- PasswordValidator
- GetUserName
- getPassword
- Зарегистрироваться
- войти
Начало программы:
import re
users = {}
Теперь мы определяем некоторые валидаторы для проверки правильности имени пользователя / пароля:
def usernameValidator(username):
errorMessage = ""
if len(username) < 5:
errorMessage = "Username should contain at least 5 characters!n"
if not re.match("^[a-z]*$" , username): # Note... this checks for more than just blank spaces!
errorMessage = "Cannot use blank spacesn"
if username in users:
errorMessage = "Username already used!n"
return errorMessage
def passwordValidator(password):
errorMessage = ""
if len(password) < 5:
errorMessage = "Password should contain at least 5 characters!n"
if not re.match("^[a-z]*$" , password): # Note... this checks for more than just blank spaces!
errorMessage = "Cannot use blank spacesn"
return errorMessage
Теперь мы пишем функции GetUserName / getPassword, которые взаимодействуют с пользователем:
def getUsername():
username = input("Create your Username: ")
errorMsg = usernameValidator(username)
print(errorMsg)
return username if errorMsg == "" else ""
def getPassword():
password = input("Create your Password: ")
errorMsg = passwordValidator(password)
print(errorMsg)
return password if errorMsg == "" else ""
Собрав все это вместе, мы пишем register / login:
def register():
username = ""
password = ""
while username == "":
username = getUsername()
while password == "":
password = getPassword()
users[username] = password
print("User created!")
def login():
username = input("Username: ")
if username not in users:
print("User unregistered! Please register!")
register()
return
password = input("Password: ")
if users[username] != password:
print("Password invalid")
Наконец, мы можем запустить:
while True:
status = input("Press R to register!nPress L to loginn")
if status.lower() == "r":
register()
if status.lower() == "l":
login()