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

НАЧАТЬ