Menu

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

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

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

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

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

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

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

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

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

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

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

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

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

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

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

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

Это идиоматичный 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.

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

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

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

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

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

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

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

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

Впереди

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

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

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

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

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

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

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

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

Coddy programming languages illustration

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

НАЧАТЬ