Не работает блок if в цикле while Python 3.7.2
Почему при первом вводе "quit" моя программа не прерывает цикл
while? В переменно answer уже сохранено значение "quit", но программа все ровно продолжает цикл while, игнорируя проверку if
file = "answer.txt"
active = True
message2 = "do you have any other reasons? (if you wanna to quit press'quit')"
message = "Why do you like programming? (if you wanna to quit press'quit')"
answer = input(message)
while active:
if answer == "quit":
active = False
with open(file, "a") as file_object:
file_object.write(f"{answer}\n")
answer = input(message2)
Ответы (3 шт):
Потому что когда вы вводите quit, цикл продолжается, потому что цикл проверяет условие только когда начинается новая итерация. То есть:
Цикл начинается, потому что условие active верно
Вы вводите quit, active становится неверным, но цикл продолжается
вы снова что-то вводите
цикл завершается, потому что условие active неверно
Как уже подметили выше, Вы после получения строки quit продолжаете цикл, записывая в файл ответ и требуя ещё одну строку для завершения цикла, который должен был закончиться ещё раньше.
Если ввод ответа в файл обязателен, то можно избавиться от флага active, сделать цикл вечным и прерывать его после ввода quit. Перед проверкой, конечно, записываем ответ в файл.
file = "answer.txt"
message2 = "do you have any other reasons? (if you wanna to quit press'quit')"
message = "Why do you like programming? (if you wanna to quit press'quit')"
answer = input(message)
while True:
with open(file, "a") as file_object:
file_object.write(f"{answer}\n")
if answer == "quit":
break
answer = input(message2)
Там прежде чем with нужно добавить
elif answer != "quit":
with open(file, "a") as file_object:
file_object.write(f"{answer}\n")
А вообще то не нужно добавить переменную как "active". Лучше пишите так:
file = "answer.txt"
message2 = "do you have any other reasons? (if you wanna to quit press'quit'):"
message = "Why do you like programming? (if you wanna to quit press'quit'):"
answer = input(message)
while answer != 'quit':
with open(file, "a") as file_object:
file_object.write(f"{answer}\n")
answer = input(message2)