Итерации и циклы

Циклы позволяют выполнять один и тот же блок кода несколько раз: пройтись по элементам списка, повторить действие N раз, продолжать пока выполняется условие. Без них пришлось бы копировать одну и ту же логику для каждого шага вручную.

Что такое итерации и циклы?

Итерация — это однократное выполнение набора инструкций. А цикл — это конструкция, которая позволяет выполнять блок кода многократно, пока выполняется определенное условие.

Python предлагает два основных типа циклов:

  • Цикл for: используется для итерации по последовательности (списку, кортежу, строке и т.д.)
  • Цикл while: выполняется, пока указанное условие остается истинным

Цикл for

Цикл for используется для перебора элементов последовательности (списка, кортежа, строки и т.д.). Это самый распространенный тип цикла в Python.

Синтаксис цикла for

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

Python 3.13
# Простой пример цикла for
fruits = ["яблоко", "банан", "вишня"]

for fruit in fruits:
    print(f"Фрукт: {fruit}")
Фрукт: яблоко
Фрукт: банан
Фрукт: вишня

Конструкция for fruit in fruits берёт каждый элемент списка по очереди, привязывает его к имени fruit и выполняет тело с отступом.

Итерация по диапазону чисел

Часто нам нужно выполнить цикл определенное количество раз. Для этого используется функция range():

Python 3.13
# Использование range() для создания последовательности чисел
for i in range(5):
    print(f"Число: {i}")
Число: 0
Число: 1
Число: 2
Число: 3
Число: 4

Функция range() создает последовательность чисел и имеет несколько вариантов использования.

В примерах ниже используется print(..., end=" "): по умолчанию print ставит в конце перенос строки, а параметр end=" " заменяет его на пробел, чтобы значения печатались в одну строку.

Python 3.13
# Варианты использования range()

# range(stop): от 0 до stop-1
for i in range(3):
    print(i, end=" ")
print()
0 1 2
# range(start, stop): от start до stop-1
for i in range(2, 5):
    print(i, end=" ")
print()
2 3 4
# range(start, stop, step): от start до stop-1 с шагом step
for i in range(1, 10, 2):  # Нечетные числа от 1 до 9
    print(i, end=" ")
1 3 5 7 9

Итерация по строкам

Строки в Python также являются последовательностями, поэтому мы можем перебирать их символы:

Python 3.13
# Перебор символов в строке
message = "Python"

for char in message:
    print(char)
P
y
t
h
o
n

Итерация с индексами

Иногда нам нужны как элементы, так и их индексы. Для этого используется функция enumerate():

Python 3.13
# Получение индексов и значений
fruits = ["яблоко", "банан", "вишня"]

for index, fruit in enumerate(fruits):
    print(f"Индекс {index}: {fruit}")
Индекс 0: яблоко
Индекс 1: банан
Индекс 2: вишня

Цикл while

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

Синтаксис цикла while

Python 3.13
count = 1

while count <= 5:
    print(f"Цикл выполняется в {count}-й раз")
    count += 1
Цикл выполняется в 1-й раз
Цикл выполняется в 2-й раз
Цикл выполняется в 3-й раз
Цикл выполняется в 4-й раз
Цикл выполняется в 5-й раз

Цикл выполняется, пока истинно условие count <= 5. Внутри обязательно нужно менять переменную из условия (здесь count += 1), иначе цикл будет бесконечным.

Бесконечный цикл

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

Python 3.13
# Пример с явным прерыванием бесконечного цикла
counter = 0

while True:  # Это условие всегда истинно
    print(f"Итерация {counter}")
    counter += 1

    if counter >= 5:  # Условие для выхода из цикла
        print("Выходим из цикла!")
        break  # Прерывает выполнение цикла
Итерация 0
Итерация 1
Итерация 2
Итерация 3
Итерация 4
Выходим из цикла!

Управление циклами

Python предоставляет несколько инструментов для управления выполнением циклов. Два главных — break и continue.

Оператор break

Оператор break позволяет немедленно выйти из цикла, независимо от условия:

Цикл проходит по числам 0–9, на 5 встречает break и выходит из цикла; числа 6–9 не посещаются

Python 3.13
# Использование break для выхода из цикла
for i in range(10):
    print(i, end=" ")
    if i == 5:
        print("\nДостигнуто число 5, выходим из цикла!")
        break
0 1 2 3 4 5
Достигнуто число 5, выходим из цикла!

Оператор continue

Оператор continue пропускает текущую итерацию и переходит к следующей:

Цикл проходит по числам 0–5, на 3 встречает continue, перепрыгивает через 3 и продолжает с 4

Python 3.13
# Использование continue для пропуска итераций
for i in range(10):
    # Пропускаем четные числа
    if i % 2 == 0:
        continue
    print(i, end=" ")
1 3 5 7 9

Блок else в циклах

У циклов for и while есть блок else, который выполняется при нормальном завершении цикла (не через break):

Python 3.13
for i in range(5):
    print(i, end=" ")
else:
    print("\nЦикл завершился без break")
0 1 2 3 4
Цикл завершился без break

Фича есть, но в реальном коде её используют редко.

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

Циклы можно вкладывать друг в друга для обработки многомерных структур данных или решения более сложных задач:

Python 3.13
# Пример вложенных циклов - таблица умножения
for i in range(1, 4):  # Строки
    for j in range(1, 4):  # Столбцы
        print(f"{i} × {j} = {i*j}", end="\t")
    print()  # Переход на новую строку после каждой строки таблицы
1 × 1 = 1	1 × 2 = 2	1 × 3 = 3
2 × 1 = 2	2 × 2 = 4	2 × 3 = 6
3 × 1 = 3	3 × 2 = 6	3 × 3 = 9

Совет: Вложенные циклы могут быть ресурсоемкими, особенно при большом количестве итераций. Используйте их осторожно и ищите более эффективные альтернативы для обработки больших объемов данных.

Списковые включения (List Comprehensions)

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

Python 3.13
# Создание списка квадратов чисел от 0 до 9
# Обычный способ
squares = []
for i in range(10):
    squares.append(i**2)
print(f"Обычный способ: {squares}")
Обычный способ: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# С использованием списковых включений
squares_comprehension = [i**2 for i in range(10)]
print(f"Через списковое включение: {squares_comprehension}")
Через списковое включение: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Списковые включения могут также содержать условия:

Python 3.13
# Фильтрация с помощью условия: только четные числа
even_squares = [i**2 for i in range(10) if i % 2 == 0]
print(f"Квадраты четных чисел: {even_squares}")
Квадраты четных чисел: [0, 4, 16, 36, 64]

Проверка понимания

Давайте проверим, насколько хорошо вы усвоили тему циклов:

Какой результат даст следующий код?

Python 3.13
total = 0
for i in range(1, 5):
    if i % 2 == 0:
        total += i
print(total)