Цикл в Python — конструкция для многократного выполнения блока кода без его копирования. Циклы Python двух типов: for перебирает элементы последовательности, while работает пока условие истинно. Оба поддерживают операторы break, continue и else. Точка входа: for i in range(5): print(i) выводит числа от 0 до 4 — без пяти строк print().
Цикл — синтаксическая конструкция, которая выполняет повторяющиеся действия без дублирования строк кода. У любого цикла два обязательных компонента: условие (или итерируемый объект) и тело цикла — блок команд с отступом 4 пробела. Без одного из них конструкция невалидна.
Один проход тела называется итерацией. Нужно вывести числа от 1 до 100? Цикл сделает это за одну запись вместо сотни строк print(). Именно для замены ручного копирования блоков кода нужны циклы в программировании — это базовый инструмент любого алгоритма.

Цикл for выбирают, когда число итераций определяется самим объектом или коллекцией, а не внешним условием. Он подходит для перебора списков, строк, словарей и числовых диапазонов — там, где последовательность известна или чётко ограничена заранее.
Синтаксис: for [переменная] in [итерируемый объект]: — тело с отступом 4 пробела. Переменную принято именовать i, j, k; если значение внутри тела не нужно — пишут _.
Итерируемый объект — любой тип с методом __iter__: список, кортеж, строка, словарь, range, множество.
| Тип |
Пример |
Что перебирает |
|---|---|---|
| Список | [1, 2, 3] | Элементы по порядку |
| Кортеж | (1, 2, 3) | Элементы по порядку |
| Строка | «abc» | Символы поочерёдно |
| Словарь | {«a»: 1} | Ключи |
| range | range(5) | Целые числа последовательности |
| Множество | {1, 2, 3} | Элементы (порядок не гарантирован) |
Минимальный рабочий пример — перебор списка:
fruits = [«яблоко», «банан», «вишня»]
for fruit in fruits:
print(fruit)
# яблоко
# банан
# вишня

range() — встроенный тип данных Python (не функция), возвращает последовательность целых чисел. Три формы записи:
Отрицательный шаг задаёт обратный перебор: range(5, 0, -1) вернёт 5, 4, 3, 2, 1. Пустой диапазон — range(1, 5, -1) — ошибки не вызывает: итераций просто 0, цикл пропускается.
Генератор списков — компактная запись цикла for в одну строку:
squares = [x**2 for x in range(5)]
# [0, 1, 4, 9, 16]
С фильтром: [x for x in range(10) if x % 2 == 0] — только чётные числа. Это синтаксический сахар (syntactic sugar): новой функциональности нет, запись короче. Если логика сложнее одного условия — обычный for читается понятнее.

Цикл while применяют, когда количество итераций неизвестно заранее. Управляющий элемент — логическое условие, а не коллекция: конструкция продолжает выполняться, пока оно остаётся True, и останавливается при False. Типичные случаи — ожидание ввода пользователя или чтение данных до маркера завершения.
Синтаксис: while [условие]: — тело. True — продолжает, False — останавливает:
n = 1
while n < 6:
print(n)
n += 1
# 1 2 3 4 5
Переменная-счётчик внутри тела обязана изменяться — иначе условие не станет False и программа зависнет в бесконечном выполнении. Аналог конструкции do-while из Java и C++: while True: — тело — if условие: break. Тело выполнится хотя бы раз, затем проверится условие выхода.

Оператор := введён в Python 3.8 по PEP 572 (Python Software Foundation). Он одновременно присваивает переменную и проверяет условие — в одной строке, убирая дублирование:
# Без оператора := — переменная нужна дважды
data = input(«Введите: «)
while data != «СТОП»:
print(data)
data = input(«Введите: «)
# С оператором := — компактнее
while (data := input(«Введите: «)) != «СТОП»:
print(data)

Три оператора управляют потоком исполнения внутри любого цикла Python — и for, и while. Они позволяют досрочно выйти, пропустить итерацию или выполнить финальный блок после завершения.
break немедленно завершает цикл при срабатывании условия внутри тела. Применяют для поиска элемента или выхода из бесконечного цикла:
for char in «Python»:
if char == «h»:
break
print(char)
# P y t
Ключевой момент: break блокирует выполнение else-блока. Если цикл прерван через break — else не выполняется.
continue пропускает остаток тела и переходит к следующей итерации — цикл не завершается, только текущий шаг пропускается. Используют для фильтрации нежелательных элементов:
for i in range(10):
if i % 2 == 0:
continue
print(i)
# 1 3 5 7 9
Ключевое отличие от break: при continue цикл продолжается; при break — останавливается полностью.
else выполняется после всех итераций при естественном завершении цикла. Если цикл прерван через break — else пропускается:
# else выполняется — break не было
for i in range(3):
print(i)
else:
print(«Готово») # выведется
# else НЕ выполняется — сработал break
for i in range(3):
if i == 1:
break
else:
print(«Не выведется»)
Это эксклюзивная конструкция Python: в Java и C++ такого else у цикла нет — там нужен отдельный if-else вне тела.


Вложенный цикл — цикл внутри тела другого. Каждый уровень вложенности добавляет +4 пробела отступа. Общее число итераций равно произведению итераций всех уровней: внешний 3 × внутренний 3 = 9.
Классический пример — таблица умножения:
for i in range(1, 4):
for j in range(1, 4):
print(i * j, end=»\t»)
print()
# 1 2 3
# 2 4 6
# 3 6 9
Внешний цикл for перебирает строки, внутренний — столбцы. Результат: матрица 3×3 с девятью значениями.
| Критерий |
for |
while |
|---|---|---|
| Когда использовать | Известная коллекция или диапазон | Динамическое условие, число шагов неизвестно |
| Тип условия | Итерируемый объект | Логическое выражение |
| Риск | Низкий | Бесконечный цикл при ошибке в условии |
| Компаньоны | range(), enumerate(), zip() | Флаги, счётчики, пользовательский ввод |
| Синтаксис | for x in iterable: | while условие: |
Правило выбора: for — для списков и числовых диапазонов; while — когда нужно ждать события или изменения значения. Оба типа цикла применяются под конкретную задачу, а не из предпочтений разработчика.
Освоить циклы Python и другие ключевые конструкции языка на практике можно на курсе «Программирование: Уверенный старт» — бесплатно, онлайн, с реальными проектами с первого урока.
for перебирает элементы коллекции или range — количество итераций определяется объектом. while выполняется, пока условие True — число шагов может быть неизвестно. Выбирайте for для списков и числовых диапазонов, while — когда нужно ждать события или изменения значения.
Вложенный цикл — цикл внутри тела другого. На каждую итерацию внешнего цикла внутренний выполняется полностью. Итого: N×M итераций. Применяется для таблиц, матриц и перебора пар элементов из двух коллекций.
В Python нет конструкции do-while. Аналог: while True: — тело — if условие: break. Такой цикл гарантированно выполнится хотя бы раз, после чего проверит условие выхода.
Добавьте break внутри тела при выполнении нужного условия. Либо измените переменную-флаг: condition = False — цикл завершится на следующей проверке. При зависании программы — Ctrl+C в терминале принудительно прерывает выполнение.
Три задачи для старта: 1) вывести числа 1–10: for i in range(1, 11): print(i); 2) сумма элементов списка: total = 0; for x in lst: total += x; 3) угадать число: while со счётчиком попыток. Запускайте каждый вариант и отслеживайте вывод.
for i in range(1, 6): for j in range(1, 6): print(i*j, end=»\t»); print() — матрица 5×5. Внешний цикл по строкам, внутренний по столбцам. Всего 25 итераций: 5 × 5. Классическая учебная задача на вложенные циклы Python.
Однострочный for: [x**2 for x in range(5)] → [0, 1, 4, 9, 16]. С условием: [x for x in range(10) if x % 2 == 0] — только чётные числа. Синтаксический сахар: функциональность идентична обычному for, запись компактнее.
Структура по блокам: определение → for с range → while с условием → break/continue/else → вложенные циклы. Каждый блок — отдельный слайд с примером кода и выводом. Для else: два контрастных примера с break и без — лучший способ показать разницу.