Циклы while
135
Например, компьютерная игра может завершаться по разным причинам:
у игрока
кончились все «жизни»; прошло отведенное время; все города, которые он должен
был защищать, были уничтожены и т. д. Игра должна завершаться при выполне-
нии любого из этих условий. Попытки проверять все возможные условия в одной
команде
while
быстро усложняются и становятся слишком громоздкими.
Если программа должна выполняться только при истинности нескольких условий,
определите одну переменную-
флаг
. Эта переменная сообщает, должна ли програм-
ма выполняться далее. Программу можно написать так, чтобы она продолжала
выполнение, если флаг находится в состоянии
True
, и завершалась, если любое из
нескольких событий перевело флаг в состояние
False
. В результате в команде
while
достаточно проверить всего одно условие: находится ли флаг в состоянии
True
. Все
остальные проверки (которые должны определить, произошло ли событие, перево-
дящее
флаг в состояние
False
) удобно организуются в остальном коде.
Добавим флаг в программу
parrot .py
из предыдущего раздела. Этот флаг, который
мы назовем
active
(хотя переменная может называться как угодно), управляет тем,
должно ли продолжаться выполнение программы:
prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
❶
active = True
❷
while active:
message = input(prompt)
❸
if message == 'quit':
active = False
❹
else:
print(message)
В точке
переменной
active
присваивается
True
, чтобы программа начинала
работу в активном состоянии. Это присваивание упрощает команду
while
, потому
что в самой команде
while
никакие сравнения не выполняются; вся логика реали-
зуется в других частях программы. Пока переменная
active
остается равной
True
,
цикл
выполняется
.
В команде
if
внутри цикла
while
значение
message
проверяется после того, как
пользователь введет данные. Если пользователь ввел строку
'quit'
, флаг
active
переходит в состояние
False
, а цикл
while
останавливается. Если пользователь ввел
любой текст, кроме
'quit'
, то введенные им данные выводятся как сообщение.
Результаты работы этой программы ничем не отличаются от предыдущего приме-
ра, в котором условная проверка выполняется прямо в команде
while
. Но теперь
в программе имеется флаг, указывающий, находится ли она в активном состоянии,
и вы сможете легко добавить новые проверки (в форме команд
elif
) для событий,
с которыми переменная
active
может перейти в состояние
False
. Это может быть
удобно в сложных программах — например, в компьютерных играх с многочис-
ленными событиями, каждое из которых может привести к завершению програм-
мы. Когда по любому из этих событий флаг
active
переходит в состояние
False
,