Czym są słowniki, krotki i zbiory?
Zmienną nazywamy pojemnik na dane. Do rozwiązywania prostych problemów wystarczają zmienne, które przechowują pojedyncze wartości podstawowych typów, np. liczby albo wartości logiczne. Bardziej rozbudowane zadania wymagają jednak pobrania i zapamiętania wielu wartości, często różnych typów. Wtedy potrzebujemy złożonych typów danych. W języku Python mamy do dyspozycji listy, krotki, słowniki oraz zbiory. Wszystkie wymienione typy ułatwiają gromadzenie i analizę danych.
Prezentacja multimedialnaPrezentacja multimedialna
Zestaw ćwiczeń interaktywnychZestaw ćwiczeń interaktywnych
SłownikSłownik
BibliografiaBibliografia
Stosowanie list w języku Python do wprowadzania danychStosowanie list w języku Python do wprowadzania danych
Obliczysz średnią ocen zapisanych przy użyciu krotki.
Użyjesz słownika do zapamiętania znaczeń wyrazów.
Dzięki operacjom na zbiorach znajdziesz liczbę trafionych liczb.
Średnia ocen
Zapewne wiele razy zdarzyło ci się liczyć średnią twoich ocen. Zastanówmy się, jak napisać program, który wykona to zadanie. Zacznijmy od czegoś prostego.
Do pisania programu możesz użyć środowiska IDLE.
Skopiuj zaprezentowany kod, wklej do pustego pliku i zapisz pod nazwą oceny_abc.py.
Wyciągnijmy wnioski. Program jest mało funkcjonalny, co wynika głównie z użycia osobnych zmiennych dla każdej oceny i ustawienia ich wartości na stałe. Jeżeli chcemy mieć możliwość podawania dowolnej liczby ocen, musimy skorzystać z takiego pojemnika na dane, który potrafi przechowywać wiele wartości. Jednym ze złożonych typów danychzłożonych typów danych, który możemy wykorzystać w języku Python, jest krotka (ang. tuple).
Krotka to podobna do listy struktura danychstruktura danych, która służy do przechowywania uporządkowanego ciągu wartości w kolejności ich wpisania, czyli inaczej sekwencjisekwencji wartości. W języku Python elementami krotek mogą być dane różnego typu, np. liczby i ciągi znakowe. Pozycję elementu w krotce określa tzw. indeks. Pierwszy element krotki ma indeks 0, drugi 1 itd. Do elementów krotki możemy się odwoływać, korzystając z indeksów.
Zaprezentujmy to na przykładzie. Dana jest krotka oceny.
By odwołać się do elementu krotki o indeksie 2 i przypisać jego wartość nowej zmiennej wybrana_ocena, użyjemy instrukcji:
Użyjmy krotki w programie.
Plik oceny_abc.py zapisz pod nazwą oceny_krotka.py. Zmień kod na podany niżej.
Zastosowanie krotki oceny() pozwala podać dowolną liczbę ocen wejściowych. Dzięki funkcji sum() łatwo sumujemy wartości liczbowe zapisane w krotce, a funkcja len() zwraca nam liczbę jej elementów. Jak widać, krotka upraszcza rozwiązywanie zadań wymagających przechowywania wielu danych.
W języku Python zawartości krotek nie można zmieniać. Gdybyśmy chcieli pobierać oceny od użytkownika, musielibyśmy użyć listy, np.: oceny = [3, 4, 5].
Jak zapamiętać znaczenia wyrazu?
Kiedy zaglądamy do słownika języka obcego, na początku szukamy wyrazu obcego, a później odczytujemy odpowiadające mu znaczenia. Podobnie zbudowane są słowniki rozumiane jako struktury danych. Zawierają one klucze i odpowiadające im wartości. Relację między kluczem i wskazywaną wartością nazywamy odwzorowaniem (ang. mapping). Klucze pełnią podobną rolę jak indeksy w sekwencjach (listach i krotkach), ale słowniki to typ niesekwencyjny.
Od wersji 3.7 Pythona porządek dodawania kluczy i wartości do słownika jest zapamiętywany.
Napiszmy prosty program, który będzie pozwalał sprawdzać znaczenia obcych wyrazów. Jego najważniejszą częścią będzie baza słów, wykorzystamy słownik.
Kopiujemy poniższy kod, wklejamy do pustego pliku i zapisujemy pod nazwą slownik_wyrazow.py.
Kluczami w naszym słowniku są ciągi znaków 'go', 'see', a wartości (znaczenia wyrazów), na które wskazują klucze, zapisane zostały w listach. Symbolem relacji między kluczem i wartością jest dwukropek.
Kluczami w słowniku mogą być napisy, liczby czy krotki. Klucze nie mogą się powtarzać. Wartościami mogą być ciągi znaków, liczby, listy, krotki czy słowniki.
Do pliku slownik_wyrazow.py dopisz podany kod:
Skopiuj swój kod i umieść go tutaj:
Po pobraniu wyrazu obcego od użytkownika chcemy wydrukować jego znaczenia zapisane w słowniku. Odczytywanie danych ze słownika polega na podaniu jego nazwy i klucza w nawiasach kwadratowych, np. wyrazy[wyraz].
Symbol * (gwiazdki) w instrukcji print() jest opcjonalny, pozwala wydrukować elementy listy jako napisy oddzielone spacjami.
Jeżeli po uruchomieniu programu podamy wyraz, który w słowniku nie występuje, zobaczymy komunikat błędu KeyError. Spróbujmy to poprawić. Drukowanie znaczenia wyrazu poprzedzimy sprawdzeniem, czy podany wyraz jest kluczem w słowniku. Posłuży nam do tego wyrażenie wyraz in wyrazy, które interpretujemy jako sprawdzenie, czy wyraz jest kluczem w słowniku wyrazy. Wartością tego wyrażenia jest prawda (True) albo fałsz (False), możemy więc użyć go w instrukcji warunkowej.
Operator in może być używany również w odniesieniu do list, krotek czy zbiorów. Pozwala sprawdzić, czy podany element należy do danej struktury. W dalszej części materiału znajdziesz kolejne przykłady.
W programie slownik_wyrazow.py dodaj instrukcję warunkową sprawdzającą, czy podany wyraz jest kluczem w słowniku. Jeżeli tak, wydrukuj jego znaczenia, w przeciwnym razie komunikat Brak wyrazu w słowniku.
Wskazówka: użyj instrukcji if wyraz in wyrazy: ... else ...
Zwróć uwagę na poprawne wcięcia.
Skopiuj swój kod i umieść go tutaj:
Ile liczb udało mi się trafić?
Znasz zapewne gry liczbowe polegające na odgadywaniu wylosowanych wcześniej liczb. Napiszemy program, który będzie sprawdzał, ile liczb spośród wylosowanych udało się odgadnąć.
Skopiuj zaprezentowany kod, wklej go do pustego pliku i zapisz pod nazwą ile_trafionych.py.
W programie używamy krotek do zapisania wylosowanych liczb oraz typowanych liczb. Elementy krotek, podobnie jak i list, możemy wskazywać za pomocą indeksów. Instrukcja warunkowa if moje_typy[0] in wylosowane_liczby: sprawdza, czy pierwsza liczba z krotki moje_typy znajduje się w krotce wylosowane_liczby. Dwie kolejne instrukcje robią to samo dla kolejnych typów i zwiększają zmienną ile_trafionych dla każdego trafienia.
Ręczne podawanie indeksów kolejnych typów oraz powtarzanie instrukcji warunkowych nie jest dobrym sposobem zliczania poprawnych typów. Do ulepszenia programu moglibyśmy użyć pętli, ale jeszcze szybciej uzyskamy wynik za pomocą operacji na zbiorach.
Zbiory zawierają niepowtarzające się elementy. Mogą to być liczby, ciągi znaków i inne typy danych. Struktury te nie zapisują pozycji dodawanych elementów, więc nie obsługują indeksacji.
Program ile_trafionych.py zapisz pod nazwą zbior_trafionych.py
Pozostaw w programie krotki z danymi, pozostały kod zastąp poniższym:
Skopiuj swój kod i umieść go tutaj:
Polecenie set() przekształca podaną krotkę lub listę na zbiór, jednocześnie eliminuje ewentualne powtarzające się wartości. Operator & oznacza operację wyznaczania części wspólnej dwóch (lub więcej) zbiorów. W naszym wypadku otrzymamy zbiór zawierający liczby występujące w obydwu krotkach: {3, 1}. Funkcja len() – podobnie jak wypadku list i krotek – zwraca nam liczbę elementów w zbiorze.
Notatnik
Prezentacja multimedialna
mmm
Indeks górny Źródło: Robert Bednarz, licencja: CC BY 3.0. Indeks górny koniecŹródło: Robert Bednarz, licencja: CC BY 3.0.
Napisz i uruchom program, który sprawdzi, ile jest zer i ile jedynek wśród podanych liczb.
Dane wejściowe:
podane liczby: 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1
Wynik:
Program wyświetla, ile zer i ile jedynek znajduje się wśród podanych liczb.
Wskazówka: dane zapisz w krotce i użyj metody count.
Napisz i uruchom program, który sprawdzi, ile unikalnych samogłosek występuje łącznie w obu podanych wyrazach.
Dane wejściowe:
wyrazy do sprawdzenia:
walizka,drzwi
Wynik:
liczby unikalnych samogłosek występujących łącznie w wyrazach
Wskazówka: wykorzystaj zbiór:
Użyj operacji: wyznaczanie części wspólnej (operator &) oraz sumy zbiorów (operator |)
Napisz i uruchom program, który wyświetli odpowiednie informacje przechowywane w słowniku.
Dane wejściowe:
S, small, 42‑44
M, medium, 46‑48
L, large, 50‑52
Wynik:
Program wyświetla informacje przechowywane w podanym miejscu w słowniku (
rozmiary['M'][1]).
Wskazówki: zdefiniuj pusty słownik rozmiary. Dodaj za pomocą przypisania slownik[klucz] = wartość informacje o rozmiarach.
Kluczami powinny być literowe oznaczenia rozmiarów. Wartościami powinny być krotki zawierające pozostałe dane związane z rozmiarem.
Zestaw ćwiczeń interaktywnych
{97: 'a', 98: 'b'} Możliwe odpowiedzi: 1. słownik, 2. krotka, 3. zbiór, 4. lista (97, 98) Możliwe odpowiedzi: 1. słownik, 2. krotka, 3. zbiór, 4. lista [97, 98] Możliwe odpowiedzi: 1. słownik, 2. krotka, 3. zbiór, 4. lista {97, 98} Możliwe odpowiedzi: 1. słownik, 2. krotka, 3. zbiór, 4. lista{97: 'a', 98: 'b'}, 2. (97, 98), 3. [97, 98], 4. {97, 98}znaki = ('+', '-', '+', '.', '.', '!'). Wskaż instrukcje, które pozwolą sprawdzić, ile razy w danych wystąpił znak "+": Możliwe odpowiedzi: 1. znaki.count('+'), 2. len(znaki), 3. set(znaki), 4. znaki.index('+')liczby = {1: 'I', 2: 'II', 3: 'III'}. Zapisz wynik polecenia list(liczby). Pamiętaj o użyciu właściwych nawiasów i oddzieleniu wartości znakiem przecinka i spacji.dane = {'ala': {'wiek': 15, 'wzrost': '160'}, 'piotr': {'wiek': 16, 'wzrost': '170'}} Możliwe odpowiedzi: 1. dane['ala'], 2. dane['ala']['wiek'], 3. dane['ala'].wiek, 4. dane.index('ala')len(set(wyraz)), 2. len(dict(wyraz)), 3. wyraz.count('a'), 4. sum(wyraz)Słownik
struktura danych zawierająca uporządkowane elementy; w języku Python sekwencjami są: napisy, listy i krotki; kolejność elementów ustalana jest podczas ich dodawania; elementy wskazywane są przez indeksy zaczynające się od zera
sposób przechowywania danych w pamięci komputera; dobór odpowiedniej struktury decyduje o złożoności i wydajności programu
typ danych pozwalający przechowywać wiele wartości; typy złożone w języku Python to napisy, listy, krotki, słowniki i zbiory
Bibliografia
Adam Jurkiewicz, Python 3 – Projekty dla początkujących i pasjonatów, Helion, Gliwice 2021,
Mark Pilgrim (autor książki Dive into Python), tłumaczenie: Warszk, Piotr Kieć, Roman Frołow, Andrzej Saski, Adam Kubiczek, Krotki, w: Zanurkuj w Pythonie, pl.wikibooks.org/wiki/Zanurkuj_w_Pythonie/Krotki, dostęp 23.02.2024,
Mark Pilgrim (autor książki Dive into Python), tłumaczenie: Warszk, Piotr Kieć, Roman Frołow, Andrzej Saski, Adam Kubiczek, Słowniki, w: Zanurkuj w Pythonie, pl.wikibooks.org/wiki/Zanurkuj_w_Pythonie/S%C5%82owniki, dostęp 23.02.2024,
Julita Gawełko, Struktury danych w Pythonie #1. Listy i krotki, pogromcykodu.pl/struktury‑danych‑w-pythonie‑listy‑i-krotki/, dostęp 23.02.2024.




![Zrzut ekranu przedstawia okno IDLE Python z uruchomioną konsolą interaktywną. W konsoli wpisano i wykonano poniższy kod źródłowy:
python
osoba1 = (1, 'Anna', 'Kowalska', 4)
osoba2 = tuple([2, 'Piotr', 'Nowak', 5])
dane = ['3', 'Jan', 'Dobry', 3]
osoba3 = tuple(dane)
print(osoba1[1], osoba1[2], osoba3[3])
# Wynik: Anna Kowalska 3
dane[1] = 'Adam'
print(dane)
# Wynik: ['3', 'Adam', 'Dobry', 3]
osoba3[0] = 'Ola'
# Traceback (most recent call last):
# File "/usr/lib/python3.10/idlelib/run.py", line 578, in runcode
# exec(code, self.locals)
# File "<pyshell#10>", line 1, in](https://static.zpe.gov.pl/portal/f/res-minimized/RR6yzQHqlBFUr/1751354301/X5HXzS5QncxCm6rGwm8ahluBDHMTOcoJ.png)






