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

Представьте, что вам нужно повторить какое-то действие много раз. Например, поприветствовать каждого гостя на вечеринке или пересчитать все элементы в списке. Делать это вручную было бы утомительно. И здесь на помощь приходят циклы! 🔄

Циклы помогают автоматизировать повторяющиеся действия, позволяя вам выполнять один и тот же блок кода несколько раз. Это экономит время и делает ваш код более чистым и эффективным.

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

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

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

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

Цикл for

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

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

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

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

>>> for fruit in fruits:
...     print(f"Я люблю {fruit}!")
Я люблю яблоко!
Я люблю банан!
Я люблю вишня!

В этом примере:

  1. fruit — это переменная-итератор, которая принимает значение каждого элемента в списке fruits по очереди
  2. Тело цикла выполняется для каждого элемента в списке
  3. После : следует блок кода с отступом, который выполняется в каждой итерации

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

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

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

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

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
# Простой пример цикла while
>>> count = 1

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

В этом примере:

  1. Цикл выполняется, пока count <= 5
  2. Внутри цикла мы увеличиваем count на 1 в каждой итерации
  3. Когда count становится равным 6, условие становится ложным, и цикл завершается

Важно: В цикле while всегда нужно изменять переменную, участвующую в условии, иначе цикл может стать бесконечным!

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

Если условие в цикле 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

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

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 пропускает текущую итерацию и переходит к следующей:

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
# Использование else с циклом
>>> for i in range(5):
...     print(i, end=" ")
... else:
...     print("\nЦикл завершен нормально")
0 1 2 3 4
Цикл завершен нормально
# Пример с break - блок else не выполнится >>> for i in range(5): ... print(i, end=" ") ... if i == 2: ... break ... else: ... print("\nЭта строка не будет выведена, так как цикл прерван")
0 1 2

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

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

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)

Мы с вами на связи
Русский