Цикл 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позволяют тонко управлять потоком исполнения.- Следите за отступами — это ключ к читаемому и корректному коду.