Что такое итерируемый объект
Итерируемый объект (iterable) — это объект, который может предоставлять свои элементы по одному. Примеры итерируемых объектов в Python: строки, списки, кортежи, словари, множества, диапазоны range(), файлы. В этом уроке мы работаем в основном со строками и числовыми диапазонами.
Строка итерируема, потому что её можно «разбить» на отдельные символы. Это позволяет легко обрабатывать текст посимвольно: считать гласные, искать подстроки, кодировать сообщения.
text = "Python"
for letter in text:
print(letter)
# Output:
# P
# y
# t
# h
# o
# n
letter получает значение текущего символа на каждой итерации. Её имя может быть любым, но осмысленные имена улучшают читаемость кода.
Синтаксис цикла for
Цикл for состоит из заголовка и тела. В заголовке указывается переменная цикла и итерируемый объект. Тело выполняется один раз для каждого элемента.
for variable in sequence:
# body — instructions for each element
pass
Как работает пример:
- Python берёт первый элемент последовательности и присваивает его переменной цикла.
- Выполняется тело цикла.
- Python берёт следующий элемент и повторяет тело.
- Когда элементы заканчиваются, цикл завершается.
Итерация
Итерация — это один шаг в процессе последовательного перебора элементов. В цикле for каждая итерация обрабатывает ровно один элемент. Количество итераций равно количеству элементов в последовательности, если цикл не прервать оператором break.
Функция range()
Функция range() создаёт последовательность целых чисел. Она часто используется с циклом for, когда нужно повторить действие заданное число раз или перебрать числа.
# One argument: stop (exclusive)
for i in range(5):
print(i)
# Output: 0 1 2 3 4
# Two arguments: start (inclusive), stop (exclusive)
for i in range(2, 6):
print(i)
# Output: 2 3 4 5
# Three arguments: start, stop, step
for i in range(1, 10, 2):
print(i)
# Output: 1 3 5 7 9
# 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 пропускает оставшуюся часть текущей итерации и переходит к следующему элементу.
for letter in "Python":
if letter == "h":
break
print(letter, end=" ")
# Output: P y t
for letter in "Python":
if letter == "h":
continue
print(letter, end=" ")
# Output: P y t o n
Конструкция for/else
У цикла for, как и у цикла while, может быть блок else. Он выполняется, если цикл завершился естественно — то есть не был прерван оператором break. Это удобно для задач поиска: если искомый элемент не найден, сработает else.
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.
for letter in "Python":
if letter == "h":
print("Found 'h'")
break
else:
print("This will NOT be printed.")
# Output: Found 'h'
Вложенные циклы
Вложенные циклы — это циклы, расположенные один внутри другого. Внутренний цикл выполняется полностью для каждой итерации внешнего цикла. Такие конструкции используются для таблиц, матриц, часов-минут и рисования фигур.
for i in "AB":
for j in "12":
print(i, j)
# Output:
# A 1
# A 2
# B 1
# B 2
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 — перебирать фиксированный диапазон.
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() выходят за рамки исходной лекции, но являются стандартным способом получить индекс при итерации и объединить несколько последовательностей. Подробнее — в разделе Справочник.