Что такое цикл for
Цикл for — это команда «сделай это для каждого»: Python по очереди берёт значения из последовательности, кладёт их в переменную цикла и каждый раз выполняет тело цикла. Тело — строки с отступом в 4 пробела под строкой с двоеточием.
for i in range(3):
print("Привет!")
Эта программа трижды выводит «Привет!». Переменная i принимает значения 0, 1 и 2, но здесь она не используется — нам важно только число повторов. Запомните форму: слово for, имя переменной, слово in, последовательность, двоеточие. Без двоеточия Python сообщит о синтаксической ошибке, а без отступа — об ошибке отступа.
В Scratch то же самое делает блок «повторить 10 раз». Если ребёнок уже собирал циклы из блоков, ему остаётся выучить запись: смысл тот же. Создатели Scratch относят циклы к базовым понятиям вычислительного мышления вместе с последовательностями, событиями и условиями[1].
Как Python выполняет цикл for шаг за шагом
Python выполняет цикл for за 3 действия на каждом шаге: берёт следующее значение из последовательности, записывает его в переменную цикла и выполняет тело. Когда значения заканчиваются, программа переходит к строке после цикла.
Проследим за программой, которая складывает числа 2, 4 и 6. Такая таблица называется трассировкой: её рисуют на бумаге, когда непонятно, почему программа выдаёт не тот ответ.
| Шаг | Значение i | Сумма до шага | Сумма после шага |
| 1 | 2 | 0 | 2 |
| 2 | 4 | 2 | 6 |
| 3 | 6 | 6 | 12 |
| после цикла | 6 | — | выводится 12 |
Обратите внимание на последнюю строку: после цикла переменная i не исчезает, в ней остаётся последнее значение. Это поведение описано в официальной документации Python, и его иногда используют в задачах. В школьной программе информатики циклы с переменной изучают в 8 классе — по федеральной образовательной программе основного общего образования это обязательная тема наряду с ветвлениями. Трассировка помогает и на уроке, и на ОГЭ: в экзамене есть задания, где нужно понять, что выведет короткая программа.
Функция range: 1, 2 и 3 аргумента
Функция range создаёт последовательность целых чисел и принимает 1, 2 или 3 аргумента: конец, начало и конец, начало, конец и шаг. Правая граница никогда не входит в последовательность — это главное, что нужно запомнить.
| Запись | Какие числа даёт | Когда нужна |
range(5) | 0, 1, 2, 3, 4 | Повторить действие 5 раз |
range(1, 6) | 1, 2, 3, 4, 5 | Числа «по-человечески», с единицы |
range(0, 11, 2) | 0, 2, 4, 6, 8, 10 | Чётные числа, шаг 2 |
range(10, 0, -1) | 10, 9, …, 1 | Обратный отсчёт |
range(5, 5) | ничего | Цикл не выполнится ни разу |
Почему граница не входит? Так проще считать: в range(5) ровно 5 чисел, а range(0, len(word)) перебирает все индексы строки без лишнего. Если нужно включить число N, пишите range(1, N + 1). Это правило описано в официальной документации Python[2], и на нём спотыкается почти каждый новичок.
Перебор строк и списков
Цикл for умеет перебирать не только числа: если поставить после in строку, переменная по очереди получит каждую букву, а если список — каждый элемент.
for bukva in "кот":
print(bukva)
for fruit in ["яблоко", "груша", "слива"]:
print("Я люблю", fruit)
Такой перебор удобнее, чем работа с индексами: не нужно думать, с нуля или с единицы начинать и где остановиться. Индексы понадобятся, когда важно знать номер элемента. Тогда пишут for i in range(len(word)) и обращаются к word[i], или используют функцию enumerate, которая отдаёт номер и элемент одновременно.
for nomer, fruit in enumerate(["яблоко", "груша"], start=1):
print(nomer, fruit)
Счётчик и сумма в цикле
Чтобы что-то посчитать в цикле, нужна переменная-накопитель: её создают до цикла со значением 0 и меняют на каждом шаге. Так находят сумму, количество и произведение.
total = 0
for i in range(1, 11):
total = total + i
print(total)
55
Частая ошибка — создать total = 0 внутри цикла. Тогда на каждом шаге сумма обнуляется, и в конце остаётся только последнее число. Ещё одна ошибка — забыть отступ у print(total) или, наоборот, поставить его лишним: если print внутри цикла, программа выведет промежуточные суммы 10 раз. Запись total += i — короткая форма того же действия.
Тот же цикл в Scratch и на уроках информатики
Цикл for — прямой родственник блока «повторить N раз» в Scratch и команды «нц для» в Школьном алгоритмическом языке: везде есть переменная, которая меняется по порядку, и тело, которое повторяется.
По федеральной образовательной программе основного общего образования язык на уроках информатики учитель выбирает сам: Python, C++, Паскаль, Java, C# или Школьный алгоритмический язык. Поэтому ученик может встретить цикл с переменной в разных записях. Хорошая новость: идея одинаковая, и если она понятна на Python, переход на другой язык занимает пару уроков. На ОГЭ по информатике, по материалам ФИПИ, в задании 16 программу можно писать на Python, и цикл for там встречается почти всегда — например, чтобы перебрать введённые числа и найти среди них подходящие.
Вложенные циклы
Вложенный цикл — это цикл внутри другого цикла: на каждый шаг внешнего внутренний проходит целиком. Если внешний повторяется 4 раза, а внутренний 3, тело внутреннего выполнится 12 раз.
for row in range(1, 4):
for col in range(1, 4):
print(row * col, end="\t")
print()
Программа выводит таблицу умножения 3 на 3. Параметр end="\t" ставит после числа табуляцию вместо перехода строки, а пустой print() после внутреннего цикла переводит строку. Вложенные циклы нужны для таблиц, рисунков из символов и перебора пар. Новичку достаточно двух уровней: три и больше уже трудно удержать в голове.
Задачи на цикл for с автопроверкой
Чтобы закрепить цикл, решите 7 задач в тренажёре: напишите код, нажмите «Проверить», и программа запустит ваше решение на нескольких тестах. Если тест не пройден, справа появится «Ожидалось» и «Получилось».
Решайте по порядку: задачи идут от простого вывода чисел к перебору букв. Подсказку открывайте, если застряли дольше 5 минут, а решение — только после нескольких попыток. Проверка извлечением из памяти закрепляет лучше, чем чтение готового кода[3], поэтому через день стоит решить те же задачи ещё раз без подсказок. Больше упражнений — в подборке задач на циклы с разбором.
Загружаем…
Когда цикл for не подходит
Цикл for не подходит, когда заранее неизвестно, сколько раз повторять действие. В этих 4 случаях нужен другой инструмент.
- Ввод до слова «стоп». Пользователь может ввести 2 или 200 строк — здесь нужен цикл while с условием.
- Игра «угадай число» с 7 попытками и досрочной победой. Удобнее while или выход через break.
- Повторить действие 1 раз. Цикл ради одного шага только усложняет код.
- Изменять список, перебирая его же. Удаление элементов во время перебора сдвигает индексы и пропускает каждый 2-й элемент.
«В Python for работает как в других языках: i меняется от 1 до N включительно». Это миф: range не включает правую границу, а for перебирает любые последовательности, а не только числа.
«Внутри цикла можно изменить i, и цикл пропустит шаги». Это не подтверждается: на следующем шаге Python возьмёт из range следующее значение, и ваше присваивание пропадёт.
Чего делать нельзя
Нельзя забывать, что тело цикла определяется отступом: одна лишняя или потерянная пара пробелов меняет смысл программы. Вот шесть правил.
- Нельзя пропускать двоеточие в заголовке цикла — будет SyntaxError.
- Не следует смешивать табы и пробелы в отступах: руководство PEP 8 рекомендует 4 пробела.
- Не стоит создавать накопитель внутри цикла — он будет обнуляться на каждом шаге.
- Не допускается удалять элементы из списка, который перебирает тот же цикл: элементы будут пропущены.
- Нельзя ждать, что правая граница войдёт в последовательность — пишите N + 1.
- Не стоит копировать одинаковые строки 10 раз вместо цикла: такой код трудно менять.
Если программа ругается на отступы, разберитесь с сообщением на странице об ошибке IndentationError. Как работают циклы в блочной среде, показано в статье про циклы в Scratch. А проверить, как вы понимаете чужой код, поможет квиз ниже.
Источники
[1] Brennan K., Resnick M. New frameworks for studying and assessing the development of computational thinking // Proceedings of the 2012 Annual Meeting of the American Educational Research Association. Vancouver, 2012.
[2] The Python Tutorial (официальная документация Python 3). Python Software Foundation.
[3] Roediger H. L., Karpicke J. D. Test-enhanced learning: Taking memory tests improves long-term retention // Psychological Science. 2006. Vol. 17, № 3. P. 249–255.
[4] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».
[5] ФИПИ. Методические рекомендации для обучающихся по организации индивидуальной подготовки к ОГЭ 2026 года. Информатика. М., 2026.
[6] van Rossum G., Warsaw B., Coghlan N. PEP 8 — Style Guide for Python Code. Python Software Foundation, 2001.
Вопросы и ответы
Почему переменную цикла часто называют i?
Это традиция из математики и старых языков: i — от слова index. Можно назвать переменную как угодно, например nomer или bukva, — понятные имена делают код читаемым.
Чем этот цикл отличается от while?
Он перебирает готовую последовательность и сам знает, когда остановиться. While повторяет, пока условие истинно, и подходит, когда число повторов заранее неизвестно.
Как выйти из цикла раньше?
Команда break сразу завершает цикл, а continue пропускает остаток текущего шага и переходит к следующему. Обычно их ставят внутри условия if.
Можно ли перебрать числа с дробным шагом?
Встроенная функция последовательностей работает только с целыми числами. Для шага 0,5 перебирают целые и делят каждое на 2.
Почему print внутри цикла выводит много строк?
Всё, что написано с отступом под заголовком цикла, выполняется на каждом шаге. Чтобы вывести результат один раз, уберите отступ у print — тогда он окажется после цикла.
Сколько раз выполнится цикл по пустой последовательности?
Ни разу: последовательность пустая. Это не ошибка, программа просто перейдёт к строке после цикла.