Rozdział 10 · Trochę automatyzacji!

Indeks, wartość i enumerate()

for potrafi iterować nie tylko przez liczby, ale także licznik i akumulator, co pozwala przekształcić proste wyszukiwanie w prawdziwe narzędzie analizy danych.

for potrafi przechodzić nie tylko przez liczby

łańcuch znaków — to sekwencja znaków (rozdział 8), a więc, for potrafi iterować i jej — znak po znaku, bez indeksów:

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

To samo dotyczy list i innych iterowalne obiektów — tak nazywa się wszystko, co for potrafi przechodzić przez jeden żywioł na raz. Struna, lista, Zakres range() wszystkie są obiektami iteracyjnymi; Dokładny mechanizm techniczny, jak dokładnie Python to robi „pod maską”

Indeks vs Wartość

W pętli for letter in "Python": dostajemy sam symbol ("wartość"), ale nie numer konta ("indeks"). Czasami liczba jest ważna, na przykład dla wyjść "symbol No1: P".

Klasyczną opcją jest cykl indeksowy

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

„Pythoniczna” wersja — enumerate()

enumerate_variant.py
slovo = "Python"
for i, letter in enumerate(slovo):
    print(i, letter)
iletter
0P
1y
2t
3h
4o
5n
Kiedy używać enumerate()
enumerate() jest potrzebne dokładnie wtedy, gdy zarówno indeks, jak i wartość są ważne jednocześnie. Jeśli w ogóle nie potrzebujesz indeksu, użyj for letter in slovo:, bez niej. Pętla indeksowa (range(len(...))) nie jest „złym” enumerate() poradzi sobie krócej.

Licznik to zmienna, który się liczy

Licznik to zmienna, który rośnie z każdą iteracją (lub zmniejsza się) o stały krok, zwykle 1. Śledzi „ile razy już jesteśmy załatwione.”

schetchik.py
glasnye = „aeeyoueyyuya”
slovo = „programowanie”
kolichestvo = 0

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

print(kolichestvo)
Symbolletter in glasnye?kolichestvo po kroku
pnie0
rnie0
oTak1
gnie1
rnie1
aTak2

Urządzenie pamięci masowej (akumulator) to zmienna, która gromadzi wynik

Przechowywanie jest zaprojektowany jak licznik, ale nie sumuje liczby kroków, lecz Sam wynik to suma, iloczyn, klejony sznurek:

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

for n in chisla:
    summa += n

print(summa)
Iteracjansumma po kroku
144
2812
31527
41643
52366
642108
Typowe w liczniku i na dysku: status
Przykładami są licznik i urządzenie magazynujące stany: zmienna, która żyje na zewnątrz cyklu, ale zmienia się w każdej iteracji wewnątrz niego. Przed cyklem stan trzeba obowiązkowo zainicjalizować (kolichestvo = 0) — bez tego kroku kolichestvo += 1 zawiesza się już w pierwszej iteracji, ponieważ zmienna jeszcze nie istnieje.

Mini-Projekt Analizatora Tekstu

Złóżmy licznik i urządzenie do przechowywania w jednym małym narzędziu – liczmy samogłoski, długość najdłuższego słowa oraz łączna liczba słów w tekście:

analizator_teksta.py
tekst = „python to proste i proste”
slova = tekst.split()

glasnye_count = 0
for letter in tekst:
    if letter in „aeeyoueyyuya”:
        glasnye_count += 1

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

print(f"słowa: {len(slova)}, samogłoski: {glasnye_count}, najdłuższy: {samoe_dlinnoe}")
Trzy niezależne napędy obok siebie
Proszę zauważyć: glasnye_count oraz samoe_dlinnoe — dwa różne akumulatory, każdy ze swoim cyklem i własną inicjalizacją początkową. Łączenie wielu stanów w jednym programie to normalna rzecz, najważniejsze, żeby nie pomylić, który stan zmienia się w której pętli.
Praktyka: indeks, wartość i enumerate()
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →
Praktyka: Mini-projekt Analizatora Tekstu
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →