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

Нужно вывести слово по буквам — каждую на своей строке. Без цикла это шесть отдельных print: для «P», для «y», для «t» и так далее. Слово подлиннее — больше строк вручную, а если оно станет известно только во время работы программы, заранее их и не напишешь.

Цикл избавляет от этой мороки: вы описываете шаг один раз, а Python сам повторяет его для каждой буквы. Одно такое повторение называют итерацией.

Циклов в Python два: for идёт по готовому набору значений, while крутится, пока выполняется условие. Начнём с первого.

Цикл for

Строка — это последовательность символов, и for умеет пройтись по ней символ за символом:

Python 3.13
message = "Python"

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

Читается почти как по-русски: «для каждого символа char в строке message — напечатай его». Python сам берёт значения по очереди, привязывает каждое к имени char и выполняет тело с отступом. Заканчиваются значения — заканчивается цикл, следить за этим не нужно.

Так же for пройдёт по любому набору значений, а не только по строке: списки, кортежи и словари ждут нас в следующих главах, и перебирать их вы будете этим же циклом.

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

Часто нам нужно выполнить цикл определенное количество раз. Для этого используется функция 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

Цикл 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

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

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

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

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