Конечно, изменив переменную max_attempts
на 2, 3, 4, 5, вы в конечном итоге найдете правильное число, которое даст вам правильное поведение.Но я считаю, что более важно знать, как думать об этой проблеме.Я бы предложил думать с точки зрения инвариантов цикла: создайте условие, которое всегда является истинным в цикле, и применяйте его при написании цикла.В этом случае давайте сделаем равными значение attempt
и количество вызовов input()
и посмотрим, верен ли ваш цикл:
print('Quiz program!\n')
answer = input('What is the capital of Wisconsin? ')
attempt = 1
max_attempts = 4
Итак, ваш attempt
установлен равным 1 послеinput()
.Эта часть в порядке, и удовлетворяет инвариант (даже до цикла).Затем цикл:
while answer != 'Madison':
attempt += 1
print('You got it wrong, please try again.\n')
answer = input('What is the capital of Wisconsin? ')
if attempt == max_attempts:
print('You used the maximum number of attempts, sorry. The correct answer is "Madison"')
break
Вы увеличиваете attempt
, затем печатаете, затем вызываете input()
.Я поставлю строку attempt
сразу после вызова input()
, чтобы она соответствовала приведенному выше коду, но в любом случае, прямо перед оператором if
, мы по-прежнему имеем значение attempt
, равное числу раз, которое мы вызывали input()
.Вот почему у вас такое поведение.
Теперь о том, как изменить ваш код: теперь вы знаете, что такое «инвариант» в цикле.Вы должны решить (1), когда делать проверку attempt == max_attempts
и (2) какое правильное значение max_attempts
проверить.Ответ других людей уже дал вам решение.