Предотвращение зацикливания
У каждого цикла while должна быть предусмотрена возможность завершения, чтобы цикл не выполнялся бесконечно. Например, следующий цикл считает от 1 до 5:
counting.py
x = 1
while x <= 5:
. .print(x)
. .x += 1
Но если случайно пропустить строку x += 1 (см. далее), то цикл будет выполняться бесконечно:
# Бесконечный цикл!
x = 1
while x <= 5:
. .print(x)
Теперь переменной x присваивается начальное значение 1, но это значение никогда не изменяется в программе. В результате проверка условия x <= 5 всегда дает результат True, и цикл while выводит бесконечную серию единиц:
1
1
1
1
…
Любой программист время от времени пишет бесконечный цикл, особенно если в программе используются неочевидные условия завершения. Если ваша программа зациклилась, нажмите Ctrl+C или просто закройте терминальное окно с выводом программы.
Чтобы избежать зацикливания, тщательно проверьте каждый цикл while и убедитесь в том, что цикл прерывается именно тогда, когда предполагается. Если программа должна завершаться при вводе некоторого значения, запустите программу и введите это значение. Если программа не завершилась, проанализируйте обработку значения, которое должно приводить к выходу из цикла. Проверьте, чтобы хотя бы одна часть программы могла привести к тому, что условие цикла станет равно False или будет выполнена команда break.
примечание
В некоторых редакторах — например, в Sublime Text — используется встроенное окно вывода. Оно может усложнить прерывание бесконечных циклов; возможно, для выхода из цикла придется закрыть редактор.
Упражнения
7-4. Дополнения для пиццы: напишите цикл, который предлагает пользователю вводить дополнения для пиццы до тех пор, пока не будет введено значение 'quit’. При вводе каждого дополнения выведите сообщение о том, что это дополнение включено в заказ.
7-5. Билеты в кино: кинотеатр установил несколько вариантов цены на билеты в зависимости от возраста посетителя. Для посетителей младше 3 лет билет бесплатный; в возрасте от 3 до 12 билет стоит $10; наконец, если возраст посетителя больше 12, билет стоит $15. Напишите цикл, который предлагает пользователю ввести возраст и выводит цену билета.
7-6. Три выхода: напишите альтернативную версию упражнения 7-4 или упражнения 7-5, в которой каждый пункт следующего списка встречается хотя бы один раз.
• Завершение цикла по проверке условия в команде while.
• Управление продолжительностью выполнения цикла в зависимости от переменной active.
• Выход из цикла по команде break, если пользователь вводит значение ‘quit’.
7-7. Бесконечный цикл: напишите цикл, который никогда не завершается, и выполните его. (Чтобы выйти из цикла, нажмите Ctrl+C или закройте окно с выводом.)