Ćwiczenia 3 - Wprowadzenie do programowania
Table of Contents
Poniższe zadania są fakultatywne - dla chętnych chcących poszerzyć wiedzę
Porady
Hashmapy
Podstawy działania
Hashmapa (zwana także: "mapą", "słownikiem", czasem nie do końca poprawnie "obiektem") to struktura danych, w której możemy przypisywać wartości do kluczy. Następnie możemy odczytać lub zapisać wartość dla danego klucza w stałym czasie, bez potrzeby wykonywania iteracji.
W Pythonie możemy je realizować za pomocą tzw. słowników
(„dictionary”, dict), których notacja składa sie z nawiasów
klamrowych:
# klucze i wartości to napisy slownik = { "pies": "dog", "kot": "cat", "ryba": "fish" }
Aby otrzymać wartość dla danego klucza, używamy notacji słownik[klucz],
gdzie klucz to napis albo zmienna typu zgodnego z typem kluczy w
danym słowniku:
slownik = { "pies": "dog", "kot": "cat", "ryba": "fish" } print(slownik["pies"])
dog
Klucze i wartości mogą być różnych typów:
slownik = { 1: "jeden", 2: "dwa", 3: "trzy", } print(slownik[1])
jeden
kto_glosowal_na = { "kandydat 1": ["Alicja", "Bob", "Cecylia"], "kandydat 2": ["Mariola", "Natalia"] } print(kto_glosowal_na["kandydat 1"])
['Alicja', 'Bob', 'Cecylia']
Dynamiczne edytowanie haszmap
Hashmapy można dynamicznie zmieniać:
slownik = { "pies": "dog", "kot": "cat", "ryba": "fish" } print(slownik["pies"]) slownik["pies"] = "doggo" print(slownik["pies"])
dog doggo
kto_glosowal_na = { "kandydat 1": ["Alicja", "Bob", "Cecylia"], "kandydat 2": ["Mariola", "Natalia"] } kto_glosowal_na["kandydat 3"] = ["Ździsław", "Weronika"] print(kto_glosowal_na)
{'kandydat 1': ['Alicja', 'Bob', 'Cecylia'], 'kandydat 2': ['Mariola', 'Natalia'], 'kandydat 3': ['Ździsław', 'Weronika']}
Hashmapy działają w jedną stronę
Hashmapy działają tylko w jedną stronę - to znaczy: znając klucz, mozemy łatwo poznać jego wartość. Ale gdy znamy tylko wartość, to sprawa jest bardziej złożona, gdyż:
- może być wiele kluczy które mają taką samą wartość
- nie ma prostego operatora oferującego taką funkcjonalność
slownik = { "pies": "dog", "kot": "cat", "ryba": "fish", "kejter": "dog", } print("szukam po kluczu:", slownik["pies"]) print("\nszukam po wartości:") szukane="dog" for klucz in slownik: wartosc = slownik[klucz] if wartosc==szukane: print(klucz, "=", szukane)
szukam po kluczu: dog szukam po wartości: pies = dog kejter = dog
Dlatego istotny jest wybór tego, co obieramy za klucze, a tego, co obieramy za wartości.
Sprawdzanie, czy w słowniku istnieje wartość dla danego klucza
Aby sprawdzić, czy dany słownik zawiera wartość dla danego klucza,
możemy użyć operatora in:
slownik = {1: "one"} print(1 in slownik) print(2 in slownik)
True False
1. Zadania
1.1. Zliczanie znaków
Napisz funkcję, która policzy, który znak (poza spacją) występuje najczęściej w danym tekście
print(najczestszy_znak("Benicarló-Peñíscola railway station is the central railway station serving the municipalities of Benicarló and Peñíscola, Spain. The station is situated on the Valencia−Sant Vicenç de Calders railway and is part of Adif and it accommodates RENFE long-distance and medium-distance trains."))
"a"
1.2. Sprawdzanie duplikatów
Napisz funkcję, która zwraca True, jeżeli w przekazanej jako argument liście liczb przynajmniej jedna liczba się powtarza:
print(ma_duplikaty([1,2,3,4,5]))
False
print(ma_duplikaty([1,2,3,4,1,5]))
True
1.3. Znajdowanie duplikatów
Napisz funkcję, która zwraca listę wszystkich liczby, które pojawiają się w przekazanej jako argument liście liczb trzy lub więcej razy:
print(wskaz_duplikaty([1,2,3,4,1,5,6,7,2,1,8,7,2,9,2]))
[1,2]