Я пытаюсь создать систему входа в систему на Python, поэтому мне нужно ввести определенное имя пользователя и пароль для входа в систему.
Это код:
uname = input("Enter username: ")
username = "John"
password = "John123"
attempts = 0
while attempts != 3:
if uname == username:
pword = input("Enter password: ")
else:
print("Invalid Username...")
if pword == password:
print("Login successful!")
break
else:
attempts += 1
if attempts == 1:
print("You have 2 attempts left")
elif attempts == 2:
print("You have 1 attempt left")
if attempts == 3:
print("Validation failed...")
Мой ожидаемый результат: когда я ввожу неправильное имя пользователя, он позволяет мне снова ввести имя пользователя после печати «Неверное имя пользователя ...», и если я ввожу правильное имя пользователя, он позволяет мне ввести пароль. Однако вывод:
Invalid Username... Traceback (most recent call last): File "/Users/(username)/Desktop/loginsystem.py", line 11, in module> if pword == password: NameError: name 'pword' is not defined
Я уже пытался добавить оператор «продолжить», но продолжает бесконечно повторять «Неверное имя пользователя ...».
Однако он отлично работает, когда я ввожу правильное имя пользователя.
Если вы переместите проверку пароля внутрь, если вы можете сделать код немного более прямым.
while attempts != 3:
uname = input('Enter username: ')
if uname == username:
pword = input("Enter password: ")
if pword == password:
print("Login successful!")
break
else:
print('Invalid Password')
else:
print("Invalid Username...")
attempts += 1
Я уже пробовал это, но он продолжает бесконечно повторять "Неверное имя пользователя..."...
да, извините, это была моя ошибка, потому что он continue
пропустил attempts += 1
я отредактировал пост с лучшим решением
Переместите пользовательский ввод внутрь цикла и реализуйте проверку на декремент для попыток:
username = "John"
password = "John123"
attempts = 3
while attempts > 0:
uname = input("Enter username: ")
attempts -= 1
if uname == username:
pword = input("Enter password: ")
else:
print("Invalid Username...")
print("You have {} attempts left.".format(attempts))
continue
if pword == password:
print("Login successful!")
break
else:
print("Invalid Password...")
print("You have {} attempts left.".format(attempts))
ВЫХОД:
Enter username: Mike
Invalid Username...
You have 2 attempts left.
Enter username: John
Enter password: mike123
Invalid Password...
You have 1 attempts left.
Enter username: John
Enter password: John123
Login successful!
РЕДАКТИРОВАТЬ:
Я бы предложил использовать while True
и оператор break внутри, что-то вроде:
while True:
uname = input("Enter username: ")
attempts -= 1
if attempts <= 0:
break
if uname == username:
# rest of the code
Проверять пароль только при правильном входе в систему (внутри блока if uname == username), в случае, когда uname != username, переменная pword не определена