Глава 10 · Немного автоматизации!

Циклы while

for умеет перебирать не только числа — а while повторяет действие, пока условие остаётся истинным, сколько бы раз это ни потребовалось.

Когда число повторов заранее неизвестно

for отлично подходит, когда мы заранее знаем, сколько раз нужно повторить действие — «4 стороны квадрата», «все буквы слова». Но что делать, если число повторов заранее неизвестно — например, «повторяй, пока пользователь не угадает число»? Для таких задач существует второй вид цикла — while.

Циклы while

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

cikl_while.py
count = 0
while count < 5:
    print(count)
    count += 1

Канонический flowchart цикла while

СТАРТcount = 0count < 5?ДАprint(count)count += 1назадНЕТКОНЕЦ
while count < 5: — проверка условия ПЕРЕД каждым телом, включая самое первое

Три части цикла while

ЧастьКодРоль
Инициализацияcount = 0готовит состояние ДО первой проверки условия
Условиеcount < 5проверяется перед каждой итерацией, включая самую первую
Обновлениеcount += 1меняет состояние так, чтобы условие рано или поздно стало ложным
ИтерацияПроверка count &lt; 5Выводcount после шага
10 < 5 → да01
21 < 5 → да12
32 < 5 → да23
43 < 5 → да34
54 < 5 → да45
5 < 5 → нетцикл завершён
while — это pre-test цикл
Условие в while проверяется до тела — значит, если условие изначально ложно, тело не выполнится вообще ни разу (ноль итераций). В Python нет отдельного «сначала выполни, потом проверь» цикла (в некоторых других языках он называется do/while) — если такое поведение нужно, его моделируют через while True с break в конце тела (мы увидим этот приём на следующей странице).

Бесконечный цикл — намеренно и случайно

Посмотрите на этот код внимательно:

beskonechnyj_cikl.py
count = 0
while count < 5:
    print(count)
    # забыли count += 1!
СТАРТprint(count)count < 5?ДА — повторитьНЕТКОНЕЦ
Состояние (count) не меняется между итерациями — условие остаётся истинным навсегда
Как остановить зависшую программу
Если программа зависла в бесконечном цикле — в терминале нажмите Ctrl+C (или кнопку «Стоп»/«Interrupt kernel» в Jupyter). Всегда проверяйте, что внутри while есть шаг, который рано или поздно сделает условие ложным.

while True — тоже нормально

while True создаёт цикл, условие которого само по себе никогда не станет ложным — единственный выход из него: break внутри тела. Это распространённый и совершенно правильный приём, когда условие остановки естественнее проверить в середине тела, а не в его начале — мы воспользуемся им уже на следующей странице.

while True сам по себе — не ошибка
while True: не является «плохой практикой» сама по себе — это осознанный инструмент. Проблема возникает только тогда, когда внутри забыли поставить break — вот тогда цикл действительно никогда не остановится.

Перебор строк — напоминание

Строка — это последовательность символов (глава 8) — for умеет перебирать её напрямую, без индексов (подробный разбор индекса и значения — на странице про enumerate()):

perebor_strok.py
for letter in "Python":
    print(letter)

for или while?

Ориентир, а не жёсткое правило
Число повторов известно заранее («нарисовать 4 стороны», «перебрать все буквы»)
for
Число повторов заранее неизвестно («пока пользователь не угадает»)
while
Естественнее проверять условие остановки в середине тела
while True + break
Нужно пройти по готовой последовательности (строка, список, range)
for
Оба вида цикла в Python одинаково мощные — выбор влияет на читаемость кода, а не на то, что вообще возможно сделать
Практика: циклы while
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →
Практика: for или while — что выбрать?
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →