Глава 10 · Немного автоматизации!

Индекс, значение и enumerate()

for умеет перебирать не только числа — а счётчик и накопитель превращают простой перебор в настоящий инструмент анализа данных.

for умеет перебирать не только числа

Строка — это последовательность символов (глава 8), а значит, for умеет перебирать и её — символ за символом, без индексов:

perebor_strok.py
for letter in "Python":
    print(letter)

То же самое работает для списков и любых других итерируемых объектов — так называют всё, что for умеет перебирать по одному элементу. Строка, список, диапазон range() — всё это итерируемые объекты; точный технический механизм, как именно Python это делает «под капотом», мы разберём в следующих главах, когда будем подробно изучать списки.

Индекс против значения

В цикле for letter in "Python": мы получаем сам символ («значение»), но не его номер по счёту («индекс»). Иногда номер важен — например, чтобы вывести «символ №1: P».

Классический вариант — цикл по индексам

cikl_po_indeksam.py
slovo = "Python"
for i in range(len(slovo)):
    print(i, slovo[i])

«Питонический» вариант — enumerate()

enumerate_variant.py
slovo = "Python"
for i, letter in enumerate(slovo):
    print(i, letter)
iletter
0P
1y
2t
3h
4o
5n
Когда использовать enumerate()
enumerate() нужен именно тогда, когда важны и индекс, и значение одновременно. Если индекс вообще не нужен — используйте for letter in slovo:, без него. Цикл по индексам (range(len(...))) — не «неправильный» способ, а просто более многословный там, где enumerate() справится короче.

Счётчик — переменная, которая считает

Счётчик — переменная, которая с каждой итерацией увеличивается (или уменьшается) на фиксированный шаг, обычно на 1. Она отслеживает «сколько раз мы это уже сделали».

schetchik.py
glasnye = "аеёиоуыэюя"
slovo = "программирование"
kolichestvo = 0

for letter in slovo:
    if letter in glasnye:
        kolichestvo += 1

print(kolichestvo)
Символletter in glasnye?kolichestvo после шага
пнет0
рнет0
ода1
гнет1
рнет1
ада2

Накопитель (аккумулятор) — переменная, которая копит результат

Накопитель устроен похоже на счётчик, но копит не количество шагов, а сам результат — сумму, произведение, склеенную строку:

nakopitel.py
chisla = [4, 8, 15, 16, 23, 42]
summa = 0

for n in chisla:
    summa += n

print(summa)
Итерацияnsumma после шага
144
2812
31527
41643
52366
642108
Общее в счётчике и накопителе: состояние
И счётчик, и накопитель — примеры состояния: переменной, которая живёт снаружи цикла, но меняется на каждой итерации внутри него. Перед циклом состояние обязательно нужно инициализировать (kolichestvo = 0) — без этого шага kolichestvo += 1 на первой же итерации упадёт с ошибкой, потому что переменной ещё не существует.

Мини-проект: анализатор текста

Соберём счётчик и накопитель вместе в одном небольшом инструменте — подсчитаем гласные, длину самого длинного слова и общее число слов в тексте:

analizator_teksta.py
tekst = "python это просто и понятно"
slova = tekst.split()

glasnye_count = 0
for letter in tekst:
    if letter in "аеёиоуыэюя":
        glasnye_count += 1

samoe_dlinnoe = ""
for slovo in slova:
    if len(slovo) > len(samoe_dlinnoe):
        samoe_dlinnoe = slovo

print(f"Слов: {len(slova)}, гласных: {glasnye_count}, самое длинное: {samoe_dlinnoe}")
Три независимых накопителя рядом
Обратите внимание: glasnye_count и samoe_dlinnoe — два разных накопителя, каждый со своим циклом и своей начальной инициализацией. Комбинировать несколько состояний в одной программе — обычное дело, главное — не запутать, какое состояние меняется в каком цикле.
Практика: индекс, значение и enumerate()
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →
Практика: мини-проект «Анализатор текста»
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →