Menu
Русский

Циклы while в Python: синтаксис, while True и как избежать бесконечного цикла

Когда выбирать while вместо for, как избегать бесконечных циклов и какие паттерны встречаются чаще всего в реальном коде.

Цикл, следящий за условием

Там, где for итерируется по известной последовательности, while продолжает крутиться пока условие истинно. К нему тянешься, когда заранее не знаешь, сколько итераций понадобится — повторять до успеха, читать ввод, пока пользователь не скажет «хватит», опрашивать сервис, пока он не ответит.

Форма простая:

main.py
Output
Click Run to see the output here.

Выведет от 0 до 4. Python проверяет условие в начале каждой итерации. Истинно — тело выполняется. Потом снова проверяет. Когда условие становится ложным — цикл заканчивается.

Заметь, что count += 1 — критично. Без него условие осталось бы истинным навсегда — бесконечный цикл. Это главная ловушка while и главная причина предпочитать for, когда он возможен.

Когда while — правильный инструмент

Несколько классических случаев:

Повторять до успеха.

main.py
Output
Click Run to see the output here.

Читать ввод, пока пользователь не выйдет.

main.py
Output
Click Run to see the output here.

Обработать очередь.

main.py
Output
Click Run to see the output here.

Общее у них то, что ты следишь за сменой состояния, а не идёшь по элементам.

while True — это нормально

Этот паттерн будет встречаться часто:

main.py
Output
Click Run to see the output here.

Это идиоматичный Python, когда «настоящее» условие выхода живёт внутри тела, а не красиво проверяется сверху. Читать такое проще, чем придумывать флаг should_continue, который ты обновляешь в одном месте, а проверяешь в другом.

Единственное правило: убедись, что break (или return, или выброс исключения) есть, и код до него в итоге доберётся. Безусловный while True: без выхода — классический способ подвесить программу.

Как избежать бесконечного цикла

Бесконечные циклы возникают, когда условие остаётся истинным навсегда. Обычные подозреваемые:

  • Забыл обновить переменную. while count < 5: требует чего-то внутри тела, что меняет count.
  • Обновил не ту переменную. while i < 10:, а внутри j += 1 — легко пропустить, если переменных больше пары.
  • Сравнение float-ов. while x != 1.0: может крутиться вечно, если x лишь приближается к 1.0. Используй <= или abs(x - 1.0) < tolerance.

Если застрял в бесконечном цикле в терминале — нажми Ctrl+C. Это посылает сигнал прерывания, и Python останавливает то, что делает.

break, continue и else

У while те же три инструмента управления потоком, что и у for:

  • break немедленно выходит из цикла.
  • continue пропускает к следующей итерации (так что условие снова проверяется).
  • else срабатывает, если цикл закончился без break.
main.py
Output
Click Run to see the output here.

Это примитивная проверка на простоту. Если сработал внутренний break — число составное. Если цикл вышел естественно (условие стало ложным), срабатывает else и объявляет число простым.

while против for: что выбрать?

Быстрый мысленный тест:

  • Есть коллекция, по которой нужно пройти?for.
  • Нужно выполнить цикл фиксированное число раз?for i in range(n):.
  • Крутишься до смены условия?while.

В раннем Python-коде for покрывает 90% циклов. while появляется, когда ты делаешь что-то вроде опроса, повторов или простого REPL. Если ты используешь while для прохода по списку с индексом — это сигнал переключиться на for + enumerate.

Практическая программа на while

Игра «угадай число» — классический пример, потому что количество итераций зависит от того, как играет пользователь:

main.py
Output
Click Run to see the output here.

Заранее знать, сколько попыток понадобится, нельзя — это зависит от догадок пользователя. Ради этого while и существует.

Впереди

Ты уже видел два типа циклов, которые Python даёт. Дальше — range() подробнее: он появляется почти в каждом «счётном» for-цикле, и мелкие нюансы стоит понимать до перехода к коллекциям.

Часто задаваемые вопросы

Когда использовать while вместо for?

Используй while, когда заранее не знаешь, сколько итераций нужно — например, повторение до успеха или чтение ввода, пока пользователь не напишет 'quit'. Используй for, когда шагаешь по известной коллекции.

Как избежать бесконечного цикла в Python?

Убедись, что что-то внутри цикла в конце концов делает условие ложным. Самая частая причина бесконечных циклов — забыть обновить переменную, от которой зависит условие. Если наткнулся — нажми Ctrl+C в терминале, чтобы остановить.

while True — это плохая практика?

Сама по себе — нет. while True: с явным break внутри — вполне нормальный паттерн для «крутимся, пока не сработает конкретное условие выхода». Чище, чем придумывать булев флаг, которым нужно управлять в двух местах.

Учитесь программировать с Coddy

НАЧАТЬ