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
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 |
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.