Цикл for и функция range
Уроки курсаЦикл for и функция range
В прошлом уроке счётчик в цикле while приходилось обновлять вручную — забыл написать i += 1, и цикл уходил в бесконечность. Цикл for решает эту проблему структурно: он сам берёт следующее значение из последовательности на каждой итерации, и счётчик обновлять не нужно.
Цикл for: синтаксис и переменная цикла
Цикл for перебирает элементы последовательности по одному. Его синтаксис выглядит так:
for переменная in последовательность:
тело цикла
Заголовок заканчивается двоеточием. Тело обязательно оформляется отступом — как в if или while. Всё, что написано с отступом под for, выполнится столько раз, сколько элементов в последовательности.
Посмотрим на минимальный пример со списком:
for color in ["red", "green", "blue"]:
print(color)
Первая итерация: Python берёт "red" из списка и присваивает его переменной color, затем выполняет print(color). Вторая итерация: берёт "green", снова выполняет тело. И так до конца списка. Вручную менять color нигде не нужно — Python делает это сам при переходе к следующему элементу.
Переменная цикла — это та самая переменная, объявленная между for и in. Её не нужно объявлять заранее: Python создаёт её в момент первой итерации. Имя выбирается произвольно, но принято давать осмысленное: если перебираешь цвета — color, если числа — i или n.
Важный момент: после того как цикл завершился, переменная цикла не исчезает. Она остаётся в памяти и хранит последнее присвоенное значение.
for color in ["red", "green", "blue"]:
print(color)
print("Последний цвет:", color) # выведет: Последний цвет: blue
Это не ошибка, а ожидаемое поведение Python. Но полагаться на это в реальном коде стоит осторожно: если цикл не выполнился ни разу (пустая последовательность), обращение к переменной цикла после него вызовет NameError.
Отступ в теле цикла — не стилистика, а синтаксис. Если убрать отступ, Python выдаст ошибку IndentationError. Стандарт — четыре пробела.
for color in ["red", "green", "blue"]:
print(color) # IndentationError: expected an indented block
Пока в этих примерах последовательность задана списком вручную. На практике для числовых диапазонов используют встроенную функцию range() — она позволяет не писать числа руками. Об этом — в следующем разделе.
