Цикл while
Уроки курсаЦикл while
Бесконечный цикл и типичная ошибка
Бесконечный цикл — это не редкий экзотический случай, а очень конкретная ловушка, в которую легко попасть при первом знакомстве с while. Программа запускается, начинает что-то выводить или просто зависает, и не останавливается сама — её приходится прерывать вручную.
Происходит это по одной причине: условие в заголовке while никогда не становится False. Python честно проверяет его перед каждой итерацией, видит True и продолжает. Снова и снова. Без конца.
Самая частая причина — переменная, от которой зависит условие, не изменяется внутри тела цикла. Вот классический пример:
n = 5
while n > 0:
print(n)
На первый взгляд всё выглядит похоже на обратный отсчёт. Но строки n -= 1 здесь нет. n остаётся равным 5 на каждой итерации, условие n > 0 всегда True, и программа будет выводить 5 бесконечно.
Чтобы исправить, достаточно добавить изменение переменной в тело:
n = 5
while n > 0:
print(n)
n -= 1 # теперь n уменьшается и цикл остановится
Есть и второй сценарий: условие составлено так, что его логически невозможно нарушить. Например:
count = 1
while count > 0:
print(count)
count += 1
Здесь count честно меняется — растёт. Но условие count > 0 от этого только укрепляется: чем больше count, тем оно истиннее. Цикл никогда не остановится.
Как распознать бесконечный цикл на практике: программа либо выводит одно и то же без остановки, либо просто «зависает» и не возвращает управление. В большинстве сред (IDLE, VS Code, Jupyter) его можно прервать сочетанием клавиш Ctrl+C.
Перед тем как запустить цикл, стоит задать себе два вопроса:
- Изменяется ли внутри тела та переменная, которая входит в условие?
- Может ли это изменение в итоге сделать условие ложным?
Если ответ на любой из них «нет» — цикл не остановится.
