Как работает цикл for: range, строки, списки и вложенные циклы

Pythonобновлено 07.10.20269 мин чтенияесть тренажёр

Цикл for в Python повторяет одни и те же команды для каждого элемента последовательности: чисел из range, букв строки или элементов списка. С ним вывод чисел от 1 до 100 занимает две строки кода вместо ста, а ниже на странице — 7 задач с автопроверкой.

Загружаем…

Что такое цикл 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Сумма до шагаСумма после шага
1202
2426
36612
после цикла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 — тогда он окажется после цикла.

Сколько раз выполнится цикл по пустой последовательности?

Ни разу: последовательность пустая. Это не ошибка, программа просто перейдёт к строке после цикла.