Python • kurs podstawowy • lekcja 14
enumerate(), zip() i wygodna iteracja
Do listy uczestników potrzebujesz numerów.
Twój cel: Ponumerujesz elementy przez enumerate() i połączysz odpowiadające sobie dane przez zip().Pętla for; minimalne wprowadzenie do list poniżej.
Co ma zrobić program?
Lista to uporządkowany zbiór elementów zapisany w nawiasach kwadratowych, np. ["Ola", "Jan"]. Na razie tylko ją tworzymy i przechodzimy po niej; zmienianie list poznasz w lekcji 18.
enumerate(names, start=1) daje w każdej iteracji parę: numer i element. Zapis for number, name przypisuje te dwie części do dwóch nazw. To proste rozpakowanie, do którego wrócisz przy krotkach. Bez start numeracja zaczyna się od 0. Numer wyświetlany od 1 nie jest indeksem listy.
zip(names, scores) daje pary elementów z tych samych pozycji. Domyślnie kończy pracę wraz z najkrótszym wejściem. Nie uzupełnia brakujących danych i nie dopasowuje osób po nazwisku. Najpierw zadbaj o zgodność długości i kolejności danych.
Przewidź przed uruchomieniem
names = ["Ola", "Jan"]
scores = [8]
for number, name in enumerate(names, start=1):
print(number, name)
for name, score in zip(names, scores):
print(name, score)
Porównaj wynik i prześledź mechanizm
Pierwsza da 1 Ola i 2 Jan. Druga tylko Ola 8. zip kończy się wraz z jednoelementową listą scores; nie tworzy wyniku dla Jana.
Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:
1 Ola
2 Jan
Ola 8
| Pozycja | names | scores | Para zip |
|---|---|---|---|
| 0 | Ola | 8 | Ola, 8 |
| 1 | Jan | brak | brak pary |
Zmień działający program
Dodaj brakujący wynik 5, definiując scores = [8, 5], i wypisz obie pary.
Pierwsza wskazówka
Zachowaj działający punkt wyjścia. Zlokalizuj konstrukcję wskazaną w poleceniu i zmień tylko ten etap. Przed uruchomieniem zapisz oczekiwany efekt.
Porównaj swoją modyfikację
names = ["Ola", "Jan"]
scores = [8, 5]
for name, score in zip(names, scores):
print(name, score)
Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:
Ola 8
Jan 5
Znajdź przyczynę problemu
Celowo błędny przykład diagnostyczny. Najpierw postaw hipotezę. Nie kopiuj tej wersji jako poprawnego rozwiązania.
Zamierzone działanie: Wypisz numer i odpowiadające mu imię.
names = ["Ola", "Jan"]
for number, name in enumerate(names, start=1):
print(names[number])
Trop do diagnozy
Porównaj zamierzony rezultat z typami, nazwami i kolejnością instrukcji. Wskaż pierwsze miejsce, w którym zachowanie odbiega od celu.
Zastosuj w nowej sytuacji
Wskazówka do rozpoczęcia
enumerate dodaje numer, zip łączy pozycje. Zgodność danych jest odpowiedzialnością autora programu.
Zacznij od przygotowania danych. Pierwsza instrukcja przykładowego rozwiązania:
products = ["sok", "woda"]
Rozwiązanie do samodzielnej kontroli
products = ["sok", "woda"]
prices = [6, 3]
print(len(products) == len(prices))
for product, price in zip(products, prices):
print(f"{product}: {price} zł")
Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:
True
sok: 6 zł
woda: 3 zł
Porównaj dane wejściowe, wynik i powód użycia konstrukcji. Inna wersja kodu jest poprawna, jeśli realizuje te same wymagania.
Co zabierasz do kolejnego programu?
enumerate dodaje numer, zip łączy pozycje. Zgodność danych jest odpowiedzialnością autora programu.
Bez zaglądania do przykładu wyjaśnij własnymi słowami, jak główna konstrukcja prowadzi od danych do wyniku. Potem sprawdź wyjaśnienie, uruchamiając swój program.