Как я могу исправить этот системный код входа в систему Python?

Я пытаюсь создать систему входа в систему на 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

Я уже пытался добавить оператор «продолжить», но продолжает бесконечно повторять «Неверное имя пользователя ...».

Однако он отлично работает, когда я ввожу правильное имя пользователя.

Проверять пароль только при правильном входе в систему (внутри блока if uname == username), в случае, когда uname != username, переменная pword не определена

user1531591 08.04.2019 15:48
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
568
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы переместите проверку пароля внутрь, если вы можете сделать код немного более прямым.

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

Я уже пробовал это, но он продолжает бесконечно повторять "Неверное имя пользователя..."...

overfl0w 08.04.2019 15:51

да, извините, это была моя ошибка, потому что он continue пропустил attempts += 1 я отредактировал пост с лучшим решением

Carlos Gonzalez 08.04.2019 15:53
Ответ принят как подходящий

Переместите пользовательский ввод внутрь цикла и реализуйте проверку на декремент для попыток:

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

Другие вопросы по теме