Zagnieżdżone struktury danych

Preview Mode

You're viewing this material in preview mode. Sign up to track your progress and access all features.

Zagnieżdżone struktury danych
Required In Progress

Python • kurs podstawowy • lekcja 22

Zagnieżdżone struktury danych

Pojedynczy słownik opisuje jednego gracza.

Twój cel: Odczytasz i przetworzysz listę słowników, rozróżniając poziomy struktury.

Listy i słowniki.

Zbuduj model działania

Lista takich słowników opisuje drużynę. Rekord to tutaj zestaw pól dotyczących jednej osoby. Zagnieżdżenie oznacza, że jedna struktura przechowuje drugą.

players[1] wybiera drugi słownik; dopiero ["score"] odczytuje w nim pole. W pętli player otrzymuje kolejne słowniki, więc nie potrzebujesz ręcznie dobierać indeksu. Zanim napiszesz dostęp, nazwij typ na każdym etapie: lista → słownik → liczba.

Do obliczenia średniej potrzebujesz sumy i liczby wyników. Dla pustej listy dzielenie przez len(players) oznaczałoby dzielenie przez zero. Sprawdź długość przed obliczeniem. W tej lekcji zakładamy, że każdy rekord ma pola name oraz score i liczbowy wynik.

Przewidź przed uruchomieniem

players = [
    {"name": "Ola", "score": 20},
    {"name": "Jan", "score": 35},
]
print(players[1]["score"])
for player in players:
    if player["score"] >= 25:
        print(player["name"])
Porównaj wynik i prześledź mechanizm
Każdy kolejny nawias działa na wyniku poprzedniego. Pusta kolekcja jest osobnym przypadkiem testowym.
Każdy kolejny nawias działa na wyniku poprzedniego. Pusta kolekcja jest osobnym przypadkiem testowym.

35 oraz Jan. players[1] jest słownikiem drugiego gracza. Dopiero klucz score daje liczbę. W filtrowaniu tylko Jan spełnia próg 25.

Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:

35
Jan
Krok dostępu Typ Wartość
players list Dwa rekordy
players[1] dict Rekord Jana
players[1]["score"] int 35
Model do prześledzenia: porównaj każdy etap z kodem. Etykiety opisują znaczenie danych, nie tylko ich wygląd.

Zmień działający program

Zwiększ wynik Oli o 5 przez dostęp do pierwszego rekordu. Nie twórz nowego pola w liście.

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ę
players = [{"name": "Ola", "score": 20}]
players[0]["score"] = players[0]["score"] + 5
print(players[0]["score"])

Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:

25

Znajdź przyczynę problemu

Celowo błędny przykład diagnostyczny. Najpierw postaw hipotezę. Nie kopiuj tej wersji jako poprawnego rozwiązania.

Zamierzone działanie: Wyświetl imię pierwszego gracza.

players = [{"name": "Ola", "score": 20}]
print(players["name"])
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

Każdy kolejny nawias działa na wyniku poprzedniego. Pusta kolekcja jest osobnym przypadkiem testowym.

Zacznij od przygotowania danych. Pierwsza instrukcja przykładowego rozwiązania:

products = [{"price": 6}, {"price": 4}]
Rozwiązanie do samodzielnej kontroli
products = [{"price": 6}, {"price": 4}]
total = 0
for product in products:
    total = total + product["price"]
if len(products) == 0:
    print("Brak danych")
else:
    print(total / len(products))

Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:

5.0

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?

Każdy kolejny nawias działa na wyniku poprzedniego. Pusta kolekcja jest osobnym przypadkiem testowym.

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.