Циклы while
127
Если программа должна выполняться только при истинности нескольких условий,
определите одну переменную-
флаг
. Эта переменная сообщает, должна ли програм-
ма выполняться далее. Программу можно написать так, чтобы она продолжала
выполнение, если флаг находится в состоянии
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
, основ-
ной игровой цикл прервется, выводится сообщение о завершении игры, и у игрока
появляется возможность сыграть еще раз.
Команда
break и выход из цикла
Чтобы немедленно прервать цикл
while
без выполнения оставшегося кода в цикле
независимо от состояния условия, используйте команду
break
. Команда
break