Ради справедливости нужно отметить, что иногда бесконечные циклы создаются преднамеренно, поскольку того требуют условия задачи. Например, мы пишем какую-то программу, которая обрабатывает запросы извне, например, поступающие по сетевому сокету.
В этом случае проще написать так:
while True:
блок_кода
Не нужно использовать пример, приведенный ранее ( когда значение управляющей переменной не установлено) - так ваш код будет похож на ошибочный. А когда вы указываете while True:, то вы явно сообщаете, что хотите создать бесконечный цикл.
Как все-таки прервать цикл, например, если в теле цикла было получено сообщение прекратить работу программы? Для этого нужно использовать инструкцию break. Например:
while True:
data = read_from_socket(
if data == "quit":
break
Вы обязательно должны предусмотреть возможность выхода из бесконечного цикла. В данном случае, если значение переменной data будет равно "quit", то выполнение цикла будет прервано.
Нужно обязательно предусмотреть возможность выхода из цикла, поскольку прерывание цикла по нажатию Ctrl + С, во-первых, считается дурным тоном, во-вторых, приводит к прерыванию всей программы, а не только цикла.
Как и в других языках программирования, в Python есть инструкция continue, позволяющая пропустить итерацию. Например:
k = 0
while k < 17:
k = k + 1
if k %5 == 0:
continue
print (k)
Программа выведет:
1
2
3
4
6
7
8
9
11
12
13
14
16
17
Как видите, в списке отсутствуют значения, кратные 5. Если остаток от деления на 5 равен 0, то мы просто переходим на следующую итерацию и пропускаем текущую. В этом коде, не смотря на его простоту, очень сложно допустить ошибку. Например, если изменять значение k уже после проверки на кратность оператором if, то можно получить бесконечный цикл:
# Внимание! Код содержит ошибку!
k = 0
while k < 17:
if k %5 == 0:
continue
print (k)
k = k + 1
Давайте посмотрим, что произойдет. Представим, что k уже равно 4. Поскольку k < 17, начнется выполнения тела цикла. Так как k % 5 не равно 0, инструкция continue не будет выполнена. Цифра 4 будет выведена на экран, после чего значение k будет увеличено на 1 и станет равно 5.
Далее проверяется условие: значение k < 17, поэтому начинается выполнение тела цикла. В результате k % 5 мы получаем 0 и пропускаем текущую итерацию. Но проблема в том, что значение k мы так и не увеличили и оно по-прежнему равно 5. Ситуация повторяется и так будет происходить, пока вы не нажмете Ctrl + С.
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев