Ć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]

Author: Jan Orlik

Created: 2022-06-15 śro 11:09

Validate