Перейти к основному содержимому

Цикл for

Циклы позволяют многократно выполнять один и тот же набор действий. В Python for — универсальный инструмент для последовательного перебора элементов: букв строки, чисел диапазона, строк файла или записей из базы данных. Чем лучше вы понимаете этот цикл, тем меньше кода нужно писать вручную.

1. Когда и зачем нужен for

for применяют каждый раз, когда требуется пройти по набору значений и сделать с каждым однотипную операцию:

  • вывести содержимое списка на экран;
  • посчитать сумму, максимум, среднее;
  • отфильтровать записи, подготовить отчёт, наполнить новый список;
  • обойти матрицу или двумерную таблицу;
  • выполнить одно и то же действие над файлами в каталоге.

2. Синтаксис цикла

Базовая конструкция выглядит так:

for переменная in последовательность:
тело_цикла
  • после ключевых слов for и in обязательно ставим двоеточие;
  • тело цикла (всё, что выполняется повторно) должно быть с одинаковым отступом — четыре пробела или один таб;
  • на каждой итерации переменная получает очередной элемент.

Пример: приветствие одноклассников

students = ['Аня', 'Дима', 'Марина']

for name in students:
print(f'Привет, {name}!')
Привет, Аня!
Привет, Дима!
Привет, Марина!

3. Что такое «итерируемый» объект

Python позволяет использовать for с любым объектом, который умеет по очереди отдавать элементы: строками, списками, кортежами, множествами, словарями, диапазонами, файловыми объектами.

3.1. Перебор строки символ за символом

word = 'hello'

for letter in word:
print(letter.upper())
H
E
L
L
O

3.2. Перебор списка

points = [12, 18, 25]

for score in points:
print(f'Набрано {score} баллов')
Набрано 12 баллов
Набрано 18 баллов
Набрано 25 баллов

3.3. Перебор словаря

По умолчанию for идёт по ключам. Чтобы получить пары ключ–значение, используйте items().

grades = {'Аня': 5, 'Дима': 4, 'Марина': 5}

for name in grades:
print(name)

for name, mark in grades.items():
print(f'{name}: {mark}')
Аня
Дима
Марина
Аня: 5
Дима: 4
Марина: 5

4. Диапазоны: range()

Функция range() создаёт арифметическую прогрессию целых чисел. Её часто используют, когда нужно просто посчитать сколько-то шагов.

4.1. Один аргумент — конец диапазона (не включительно)

for number in range(3):
print(number)
0
1
2

Диапазон начинается с нуля и не включает верхнюю границу.

4.2. Два аргумента — начало и конец

for number in range(2, 6):
print(number)
2
3
4
5

4.3. Три аргумента — начало, конец, шаг

for number in range(10, 0, -3):
print(number)
10
7
4
1

Шаг может быть отрицательным — тогда идём «назад».

4.4. Преобразование в список

Иногда удобно увидеть значения целиком:

numbers = list(range(1, 10, 2))
print(numbers)
[1, 3, 5, 7, 9]

5. Счётчик и индекс: enumerate()

Когда нужен номер элемента, используйте enumerate(). Она возвращает пары (индекс, значение).

fruits = ['яблоко', 'банан', 'манго']

for index, fruit in enumerate(fruits, start=1):
print(f'{index}. {fruit}')
1. яблоко
2. банан
3. манго

6. Распаковка нескольких значений сразу

Если в последовательности лежат кортежи, переменных в заголовке цикла можно указать несколько.

pairs = [('x', 1), ('y', 2), ('z', 3)]

for axis, value in pairs:
print(f'Ось {axis}: {value}')
Ось x: 1
Ось y: 2
Ось z: 3

Так удобно проходить результаты dict.items() или списки координат.

7. Управление ходом цикла: break, continue, else

7.1. break — прервать цикл досрочно

numbers = [4, 8, 15, 16, 23, 42]

for number in numbers:
if number % 2 != 0:
print('Нашли нечётное:', number)
break
Нашли нечётное: 15

7.2. continue — пропустить текущую итерацию

for number in range(1, 6):
if number == 3:
continue
print(number)
1
2
4
5

7.3. else после цикла

else выполнится, если цикл завершился без break.

def find_divisible(numbers, divisor):
for number in numbers:
if number % divisor == 0:
print('Нашли делящееся число:', number)
break
else:
print('Подходящих чисел нет')


find_divisible([5, 7, 9], 3)
find_divisible([5, 7, 11], 3)
Нашли делящееся число: 9
Подходящих чисел нет

8. Вложенные циклы

Внутри одного for можно запустить другой. Каждый уровень перебирает свою последовательность.

matrix = [[1, 2], [3, 4], [5, 6]]

for row_index, row in enumerate(matrix, start=1):
row_sum = 0
for value in row:
row_sum += value
print(f'Строка {row_index}: сумма = {row_sum}')
Строка 1: сумма = 3
Строка 2: сумма = 7
Строка 3: сумма = 11

9. Цикл for и условные проверки

Часто внутри цикла используют if, чтобы реагировать только на отдельные элементы.

temperatures = [18, 21, 14, 25, 30]

for value in temperatures:
if value >= 25:
print(f'{value}°C — пора на пляж')
elif value <= 15:
print(f'{value}°C — лучше взять куртку')
14°C — лучше взять куртку
25°C — пора на пляж
30°C — пора на пляж

10. Частые ошибки и как их избежать

  • Забыли про двоеточие или отступ. Интерпретатор сразу сообщит SyntaxError, но лучше внимательнее относиться к оформлению.
  • Меняете список во время перебора. Это может привести к пропуску элементов. Используйте копию: for item in list(items) или проходите по новому списку.
  • Не учитываете, что range не включает конечную границу. Если нужно взять её тоже, добавьте единицу: range(start, stop + 1).
  • Повторно используете переменную цикла после завершения. Значение останется последним, поэтому лучше давать переменным «говорящие» имена и не опираться на них вне цикла без необходимости.

Мини-памятка

  • for перебирает любой итерируемый объект.
  • range() помогает пройти заданное количество шагов, в том числе с шагом и «назад».
  • enumerate() выдаёт индексы, а распаковка кортежей делает код чище.
  • break, continue и else позволяют тонко управлять потоком исполнения.
  • Следите за отступами — это ключ к читаемому и корректному коду.