Как выйти из цикла while? (2)

correct_password = 'QWERTY'
code_word = 'python'

attempt = 2
while True:
    if input() == correct_password:
        print('Введите кодовое слово')
        while attempt > 0:
            if input() == code_word:
                print('Двойная аутентификация прошла успешно')
                break
            attempt -= 1
    else:
        print('Пароль неправильный. Повторите попытку')

Ответы (2 шт):

Автор решения: Стас

Я бы сделал что-то вроде такого:

correct_password = 'QWERTY'
code_word = 'python'

attempt = 2
authenticated = False
while not authenticated:
    attempt = 2 # <-- в случае, если пользователь потратил две попытки, 
    # то при введении нового пароля нужно дать еще две попытки
    if input() == correct_password:
        print('Введите кодовое слово')
        while attempt > 0:
            if input() == code_word:
                print('Двойная аутентификация прошла успешно')
                authenticated = True # если код введен правильно, то устанавливаем флаг в истину, 
                # это позволит завершиться внешнему циклу while
                break
            attempt -= 1
        else:
            print("Ошибка аутентификации") # добавил сообщение о превышении числа попыток
    else:
        print('Пароль неправильный. Повторите попытку')
→ Ссылка
Автор решения: Максим Кочнев

По итогу получилось разобраться, добавил флаг, немного изменил код и нашел ответ

correct_password = 'QWERTY'
code_word = 'python'

authenticated = False
while not authenticated:
    attempt = 2
    if input() == correct_password:
        print('Введите кодовое слово')
        while attempt > 0:
            attempt -= 1
            if input() == code_word:
                print('Двойная аутентификация прошла успешно')
                authenticated = True
                break
            elif attempt == 0:
                authenticated =True
    else:
        print('Пароль неправильный. Повторите попытку')
→ Ссылка