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

Волшебные циклы! Циклы for

Наконец-то настоящая автоматизация: вместо повторения кода вручную — просим Python повторить его самостоятельно.

Прежде чем Python: повторение вокруг нас

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

Три структуры алгоритма: вспоминаем

В главе 9 мы разобрали первые две из трёх фундаментальных структур, из которых складывается любой алгоритм. Третья — повторение — и есть тема этой главы.

Три структуры, из которых строится любой алгоритм
1 · Последовательность
Шаги идут один за другим
«Сначала… потом… потом…»
Глава 9
2 · Ветвление
Выбор одного из путей по условию
if / elif / else
Глава 9
3 · Повторение
Один и тот же блок — снова и снова
for / while
Эта глава

Что не так с этим кодом?

Вот квадрат из главы 6 — уже знакомый код: четыре одинаковых блока «шаг вперёд, поворот», записанных вручную:

kvadrat_bez_cikla.py
artist.forward(100)
artist.right(90)
artist.forward(100)
artist.right(90)
artist.forward(100)
artist.right(90)
artist.forward(100)
artist.right(90)

А теперь представьте, что нужен не квадрат, а двадцатиугольник. Копировать эти две строки ещё 16 раз вручную — долго и легко ошибиться. Именно для таких повторяющихся блоков и существуют циклы: способ сказать Python «повтори это N раз» вместо того, чтобы копировать код руками.

Термины цикла

Прежде чем писать первый цикл, договоримся о словах, которыми будем его описывать — дальше они встретятся во всей главе:

ТерминЧто это
циклконструкция, которая повторяет один и тот же блок кода несколько раз
тело циклатот самый блок кода, который повторяется (строки с отступом под for/while)
итерацияодин проход тела цикла — один «раз» из «повтори N раз»
условието, что цикл проверяет, чтобы решить, продолжать или остановиться
счётчикпеременная, которая считает номер итерации или меняется с каждым шагом

Циклы for

Самый частый вид цикла в Python — for. Вместе с range() он умеет повторить блок кода заданное число раз:

cikl_for.py
for i in range(5):
    print(i)

Разбираем по словам

Часть кодаЧто означает
for«начинаем цикл»
iпеременная цикла — на каждом шаге получает следующее значение из range(5)
in range(5)источник значений: числа от 0 до 4
:дальше начинается тело цикла (с отступом)
print(i)тело цикла — то, что повторяется на каждой итерации
Итерация 1i = 0 → print(0)Итерация 2i = 1 → print(1)Итерация 3i = 2 → print(2)Итерация 4i = 3 → print(3)Итерация 5i = 4 → print(4)
for i in range(5): print(i) — пять итераций одного и того же тела цикла

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

Важно сразу привыкнуть к правильной картине происходящего: for не «выполняет тело N раз по волшебству» — на каждом шаге он спрашивает «есть ли следующий элемент?», и если да — выполняет тело и спрашивает снова:

СТАРТПолучить следующийэлемент из range(5)Есть следующеечисло?ДАprint(i)назадНЕТКОНЕЦ
for i in range(5): print(i) — цикл каждый раз запрашивает следующий элемент

Трасса выполнения

Таблица трассировки — способ построчно проследить, что происходит на каждой итерации. Мы будем пользоваться такой таблицей всю главу:

ИтерацияiВывод (print)
100
211
322
433
544
range() с разными аргументами — коротко
range(5) — от 0 до 4. range(2, 8) — от 2 до 7. range(0, 10, 2) — от 0 до 8 с шагом 2: 0, 2, 4, 6, 8. Подробный разбор — на следующей странице.

Когда переменная цикла не нужна

Если само число повторов важно, а не значение счётчика — по традиции его называют _ (нижнее подчёркивание), сигнализируя «это значение сознательно не используется»:

Квадрат из главы 6: 8 строк → 2 строки
Без цикла (глава 6)
artist.forward(100)
artist.right(90)
artist.forward(100)
artist.right(90)
artist.forward(100)
artist.right(90)
artist.forward(100)
artist.right(90)
С циклом for
for _ in range(4):
    artist.forward(100)
    artist.right(90)
Что использовать сегодня: цикл for. Он не «современнее» в смысле версии Python — циклы существуют с самых первых версий языка, — но именно ради него стоило дочитать до этой главы: то же самое поведение, в 4 раза короче, и легко изменить число повторов одной цифрой.
_ — соглашение, а не специальный синтаксис
_ — обычное имя переменной, Python не обрабатывает его как-то по-особому. Это просто договорённость между программистами: «здесь мы намеренно не используем значение цикла». Написать for x in range(4): тоже сработает — но будет менее понятно читателю кода.
Практика: цикл for и терминология
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →