Przejdź do głównej treści
eLearner.app
Moduł 2 · Lekcja 1 z 45/36 w kursie~10 min
Lekcje modułu (1/4)

Pętle for i range

Pętla for w Pythonie służy do iteracji po sekwencji elementów: liście, ciągu znaków, przedziale (range), słowniku… wszystkim, co jest "iteralne".

Python
parole = ["ciao", "mondo", "!"]
for p in parole:
    print(p)
# ciao
# mondo
# !

Wzór jest zawsze taki sam: for <variable> in <iterable>: a po nim wcięty blok, który zostanie wykonany raz dla każdego elementu.

range(...): generowanie przedziałów liczb całkowitych

range tworzy leniwą (lazy) sekwencję liczb całkowitych. Trzy formy:

Python
range(5)         # 0, 1, 2, 3, 4
range(2, 6)      # 2, 3, 4, 5
range(0, 10, 2)  # 0, 2, 4, 6, 8     (step)
range(5, 0, -1)  # 5, 4, 3, 2, 1     (negative step)

range jest prawostronnie wykluczający, podobnie jak slice. Jest to obiekt leniwy: nie alokuje pamięci dla wszystkich liczb, lecz generuje je po kolei.

Python
totale = 0
for i in range(1, 11):
    totale = totale + i
totale  # 55  (1+2+...+10)

Iteracja z indeksem: enumerate

Gdy potrzebujesz elementu i jego indeksu razem, użyj enumerate:

Python
parole = ["ciao", "mondo", "!"]
for i, p in enumerate(parole):
    print(i, p)
# 0 ciao
# 1 mondo
# 2 !

enumerate generuje pary (index, value), które przypisujemy bezpośrednio do dwóch zmiennych poprzez rozpakowywanie krotek.

Iterowanie po dwóch sekwencjach równolegle: zip

Python
nomi = ["Ada", "Linus", "Grace"]
anni = [36, 54, 79]
for n, a in zip(nomi, anni):
    print(f"{n} ha {a} anni")

zip zatrzymuje się na najkrótszej sekwencji.

range() i lenistwo Pythona

W Pythonie funkcja range() nie alokuje rzeczywistej listy w pamięci: zwraca leniwy generator (lazy generator), który dostarcza liczby pojedynczo na żądanie (na przykład w pętli for). Pozwala to na iterację po milionach liczb całkowitych bez zapełniania pamięci RAM. Aby podejrzeć wartości range jako listę, możesz ją jawnie przekonwertować za pomocą list(range(5)).

Spróbuj sam

Ćwiczenie#python.m2.l1.e1
Próby: 0Ładowanie...

Oblicz sumę liczb od 1 do 100 (włącznie) za pomocą pętli for po range(...), przypisz sumę do zmiennej `total` i oceń.

Ładowanie edytora...
Pokaż wskazówkę

range(1, 101) generuje 1, 2, ..., 100 (wykluczając prawą stronę).

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#python.m2.l1.e2
Próby: 0Ładowanie...

Mając daną listę `words = ['uno', 'due', 'tre']`, utwórz listę `pairs` ciągów znaków takich jak '0:uno', '1:due', '2:tre' przy użyciu enumerate. Oceń `pairs`.

Ładowanie edytora...
Pokaż wskazówkę

enumerate(words) zwraca (index, value) przy każdej iteracji.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#python.m2.l1.e3
Próby: 0Ładowanie...

Oblicz sumę wszystkich liczb parzystych od 2 do 20 włącznie, używając pętli `for` po `range`. Zapisz ostateczną sumę w zmiennej `even_sum` i oceń ją.

Ładowanie edytora...
Pokaż wskazówkę

Użyj range(2, 21, 2), aby iterować tylko po parzystych liczbach całkowitych od 2 do 20.

Rozwiązanie dostępne po 3 próbach