📖 Теория: Цикл for

⚡ Кратко

Цикл for перебирает элементы итерируемого объекта по одному. Каждый проход тела цикла называется итерацией. Функция range(start, stop, step) создаёт числовую последовательность: start включается, stop — нет, step задаёт шаг. Операторы break и continue управляют ходом цикла, а блок else выполняется, если цикл завершился без break.

  • Итерируйте строки напрямую: for letter in text:.
  • Используйте range() для чисел и индексов.
  • for/else удобен для поиска: else срабатывает, если искомый элемент не найден.
  • Вложенные циклы позволяют обрабатывать двумерные структуры и рисовать фигуры.

Что такое итерируемый объект

Итерируемый объект (iterable) — это объект, который может предоставлять свои элементы по одному. Примеры итерируемых объектов в Python: строки, списки, кортежи, словари, множества, диапазоны range(), файлы. В этом уроке мы работаем в основном со строками и числовыми диапазонами.

Строка итерируема, потому что её можно «разбить» на отдельные символы. Это позволяет легко обрабатывать текст посимвольно: считать гласные, искать подстроки, кодировать сообщения.

📄 examples/string_iteration.py
text = "Python"
for letter in text:
    print(letter)
# Output:
# P
# y
# t
# h
# o
# n
💡 На заметку: переменная цикла letter получает значение текущего символа на каждой итерации. Её имя может быть любым, но осмысленные имена улучшают читаемость кода.

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

Цикл for состоит из заголовка и тела. В заголовке указывается переменная цикла и итерируемый объект. Тело выполняется один раз для каждого элемента.

📄 examples/for_basic.py
for variable in sequence:
    # body — instructions for each element
    pass

Как работает пример:

  1. Python берёт первый элемент последовательности и присваивает его переменной цикла.
  2. Выполняется тело цикла.
  3. Python берёт следующий элемент и повторяет тело.
  4. Когда элементы заканчиваются, цикл завершается.

Итерация

Итерация — это один шаг в процессе последовательного перебора элементов. В цикле for каждая итерация обрабатывает ровно один элемент. Количество итераций равно количеству элементов в последовательности, если цикл не прервать оператором break.

Функция range()

Функция range() создаёт последовательность целых чисел. Она часто используется с циклом for, когда нужно повторить действие заданное число раз или перебрать числа.

📄 examples/range_stop.py
# One argument: stop (exclusive)
for i in range(5):
    print(i)
# Output: 0 1 2 3 4
📄 examples/range_start_stop.py
# Two arguments: start (inclusive), stop (exclusive)
for i in range(2, 6):
    print(i)
# Output: 2 3 4 5
📄 examples/range_step.py
# Three arguments: start, stop, step
for i in range(1, 10, 2):
    print(i)
# Output: 1 3 5 7 9
📄 examples/range_negative.py
# Negative step: count backwards
for i in range(10, 0, -2):
    print(i)
# Output: 10 8 6 4 2
⚠️ Важно: при отрицательном шаге start должен быть больше stop, иначе последовательность будет пустой. Например, range(0, 10, -1) не выдаст ни одного числа.

Операторы break и continue

Оператор break немедленно прерывает цикл и передаёт управление следующей строке после тела цикла. Оператор continue пропускает оставшуюся часть текущей итерации и переходит к следующему элементу.

📄 examples/for_break.py
for letter in "Python":
    if letter == "h":
        break
    print(letter, end=" ")
# Output: P y t
📄 examples/for_continue.py
for letter in "Python":
    if letter == "h":
        continue
    print(letter, end=" ")
# Output: P y t o n

Конструкция for/else

У цикла for, как и у цикла while, может быть блок else. Он выполняется, если цикл завершился естественно — то есть не был прерван оператором break. Это удобно для задач поиска: если искомый элемент не найден, сработает else.

📄 examples/for_else_found.py
for letter in "Python":
    if letter == "a":
        print("Found 'a'")
        break
    print(letter, end=" ")
else:
    print("\nNo 'a' found.")
# Output: P y t h o n
#         No 'a' found.
📄 examples/for_else_break.py
for letter in "Python":
    if letter == "h":
        print("Found 'h'")
        break
else:
    print("This will NOT be printed.")
# Output: Found 'h'

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

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

📄 examples/nested_basic.py
for i in "AB":
    for j in "12":
        print(i, j)
# Output:
# A 1
# A 2
# B 1
# B 2
📄 examples/clock_nested.py
for hour in range(24):
    for minute in range(60):
        if minute < 10:
            print(f"Time: {hour}:0{minute}")
        else:
            print(f"Time: {hour}:{minute}")

Комбинация while и for

Нет запрета комбинировать циклы разных типов. Например, внешний цикл while может управлять условием, а внутренний for — перебирать фиксированный диапазон.

📄 examples/while_for_combo.py
current_hours = int(input("Enter current hour: "))
hours = 3
end_time = current_hours + hours

while current_hours < 24 and current_hours < end_time:
    for minutes in range(60):
        print(f"Time: {current_hours}:{minutes:02d}")
    current_hours += 1
Проверить по документации: встроенные функции enumerate() и zip() выходят за рамки исходной лекции, но являются стандартным способом получить индекс при итерации и объединить несколько последовательностей. Подробнее — в разделе Справочник.