Preview Mode

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

Słowniki
Required In Progress

Python • kurs podstawowy • lekcja 20

Słowniki

Profil gracza ma nazwę i punkty.

Twój cel: Odczytasz i zmienisz nazwane pola słownika oraz obsłużysz brak klucza.

Listy, pary wartości i pętle.

Co ma zrobić program?

Słownik dict wiąże klucze z wartościami: player["points"] wybiera pole po nazwie, a nie po pozycji. Klucze są unikalne. Przypisanie do istniejącego klucza zastępuje wartość, a do nowego dodaje pole.

Nawiasy kwadratowe wymagają istnienia klucza; w przeciwnym razie dostaniesz KeyError. get(key, default) zwraca wartość albo wskazaną wartość domyślną, gdy klucza nie ma. Nie dodaje wtedy klucza do słownika. Bez drugiego argumentu domyślnym wynikiem jest None.

for key, value in player.items() przechodzi po parach. Samo for key in player przechodzi po kluczach. Operator in sprawdza obecność klucza. W naszych danych klucze są napisami: cudzysłowy odróżniają nazwę pola od nazwy zmiennej.

Przewidź przed uruchomieniem

player = {"name": "Ola", "points": 8}
print(player.get("level", 1))
print("level" in player)
player["points"] = player["points"] + 2
print(player["points"])
Porównaj wynik i prześledź mechanizm
Słownik wybiera dane po kluczu. get obsługuje brak pola, ale go nie tworzy.
Słownik wybiera dane po kluczu. get obsługuje brak pola, ale go nie tworzy.

1, False i 10. get zwraca domyślne 1, ale nie zapisuje pola. Aktualizacja points odczytuje dotychczasowe 8 i przypisuje 10.

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

1
False
10
Operacja name points level
Początek Ola 8 brak
get("level", 1) Ola 8 nadal brak
Aktualizacja points Ola 10 brak
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

Dodaj pole level przez przypisanie, a potem wypisz wszystkie pary przez items().

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ę
player = {"name": "Ola", "points": 8}
player["level"] = 1
for key, value in player.items():
    print(key, value)

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

name Ola
points 8
level 1

Znajdź przyczynę problemu

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

Zamierzone działanie: Odczytaj tekstowy klucz points.

player = {"points": 8}
print(player[points])
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

Słownik wybiera dane po kluczu. get obsługuje brak pola, ale go nie tworzy.

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

book = {"title": "Atlas", "copies": 3}
Rozwiązanie do samodzielnej kontroli
book = {"title": "Atlas", "copies": 3}
book["copies"] = book["copies"] - 1
print(book["copies"])
print(book.get("author", "Nieznany"))

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

2
Nieznany

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?

Słownik wybiera dane po kluczu. get obsługuje brak pola, ale go nie tworzy.

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.