Těchto pár úkolů slouží k procvičení práce se slovníky.
Napište funkci mocniny
, která pro argumentem zadané číslo n
vytvoří
a vrátí slovník,
kde jako klíče budou čísla od jedné do n
a jako hodnoty k nim
jejich druhé mocniny.
Například: mocniny(4)
vrátí {1: 1, 2: 4, 3: 9, 4: 16}
Napište proceduru, která vypíše obsah slovníku (klíče a k nim náležící hodnoty) na jednotlivé řádky.
Například vypis_slovnik(mocniny(4))
vypíše
Klíč 1, hodnota 1
Klíč 2, hodnota 4
Klíč 3, hodnota 9
Klíč 4, hodnota 16
Na videu jsem používal česko-anglický překladový slovník jako tenhle:
{'Jablko': 'Apple', 'Knoflík': 'Button', 'Myš': 'Mouse'}
Napište funkci, která z česko-anglického slovníku (zadaného argumentem) vytvoří slovník anglicko-český. Můžete předpokládat že každý anglický termín se ve slovníku vyskytuje max. jednou.
Napište funkci pocet_znaku
, která jako argument dostane řetězec
a vrátí slovník,
ve kterém budou jako klíče jednotlivé znaky ze zadaného řetězce a jako
hodnoty počty výskytů těchto znaků v řetězci. Například:
Například: pocet_znaku("hello world")
vrátí {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
Další úkol kombinuje slovníky se soubory.
Napište program, který vypíše básničku ze souboru basnicka.txt
, ale každé
písmeno nahradí jiným podle následujícího slovníku:
{'a': 'ɐ', 'b': 'q', 'c': 'ɔ', 'd': 'p', 'e': 'ǝ', 'f': 'ɟ', 'g': 'ƃ',
'h': 'ɥ', 'i': 'ᴉ', 'j': 'ɾ', 'k': 'ʞ', 'l': 'l', 'm': 'ɯ', 'n': 'u',
'o': 'o', 'p': 'd', 'q': 'b', 'r': 'ɹ', 's': 's', 't': 'ʇ', 'u': 'n',
'v': 'ʌ', 'w': 'ʍ', 'x': 'x', 'y': 'ʎ', 'z': 'z', 'A': '∀', 'B': 'B',
'C': 'Ɔ', 'D': 'D', 'E': 'Ǝ', 'F': 'Ⅎ', 'G': 'פ', 'H': 'H', 'I': 'I',
'J': 'ſ', 'K': 'ʞ', 'L': '˥', 'M': 'W', 'N': 'N', 'O': 'O', 'P': 'Ԁ',
'Q': 'Q', 'R': 'R', 'S': 'S', 'T': '┴', 'U': '∩', 'V': 'Λ', 'W': 'M',
'X': 'X', 'Y': '⅄', 'Z': 'Z', '0': '0', '1': 'Ɩ', '2': 'ᄅ', '3': 'Ɛ',
'4': 'ㄣ', '5': 'ϛ', '6': '9', '7': 'ㄥ', '8': '8', '9': '6', ',': "'",
'.': '˙', '?': '¿', '!': '¡', '"': '„', "'": ',', '`': ',', '(': ')',
')': '(', '[': ']', ']': '[', '{': '}', '}': '{', '<': '>', '>': '<',
'&': '⅋', '_': '‾'}
Znaky, které ve slovníku nejsou, program vypíše nezměněné.
Nepovinný bonus: Každý řádek navíc vypište pozpátku (od posledního písmena). (Který typ sekvencí umíte obrátit?)
Využijte soubory a formát JSON pro ukládání informací v programech, které už máte hotové.
Vyberte si jednu hru, kterou už máte naprogramovanou: Piškvorky (jednodušší) nebo Šibenici (složitější).
Po každém tahu hru hráče uložte: stav hry převeďte na JSON a uložte do
souboru stav.json
.
Při spuštění programu načtěte uložený stav se souboru. Tedy:
stav.json
:Když hra (nebo, u Šibenice, hádání jednoho slova) skončí,
soubor stav.json
odstraňte aby příští hra
začala zase od začátku.
Na odstranění souboru můžete použít funkci
os.remove
.
POZOR: Funkce nepoužívá „odpadkový koš“ – daný soubor jednou provždy smaže:
import os
os.remove("stav.json")
Typicky „slovníková“ hříčka:
Úkolem je vytvořit známou skautskou hru „Kdo? S kým? Co dělali?“.
Hra se hráče zeptá postupně na různé otázky, například „Kdo?“, „S kým?“, „Co dělali?“, „Kde?“, „Kdy?“, a nakonec „Proč?“, s tím, že mu umožní na jednu otázku odpovědět vícekrát a všechny odpovědi si uloží do slovníku, podobně jako jsme na lekci měli telefonní čísla přiřazená ke jménům, např:
{
'Kdo': ['Anče', 'Kuba', 'Hajnej'],
'S kým': ['Hyacint', 'Rumburak', 'Blekota'],
...
}
Seznam otázek by mělo být možné změnit v kódu na jednom místě bez zásahu do logiky programu.
Hra vytvoří nový slovník, ve kterém bude ke každé otázce přiřazena právě jedna náhodně vybraná odpověď.
{
'Kdo': 'Anče',
'S kým': 'Hyacint',
...
}
Na závěr pak hra z takto vybraných odpovědí složí větu, kterou vypíše uživateli.
Doporučuji hru rozdělit do tří funkcí, aby hru šlo napsat takto:
vsechny_odpovedi = ziskej_odpovedi()
vybrane_odpovedi = vyber_odpovedi(vsechny_odpovedi)
vypis_vysledek(vybrane_odpovedi)
A nakonec rochu netradiční úkol s funkcemi.
Bonusový nepovinný úkol.
Napište program, který postupně načte od uživatele dvě čísla a jednoznakový
řetězec – buď '+'
, '-'
, '*'
nebo '/'
.
Program provede na číslech příslušnou operaci.
Tenhle úkol už jste jednou dělali. Tentokrát ale pro výběr operace použijte následující slovník funkcí:
def secti(a, b):
return a + b
def odecti(a, b):
return a - b
def vynasob(a, b):
return a * b
def podel(a, b):
return a / b
slovnik_operaci = {
'+': secti,
'-': odecti,
'*': vynasob,
'/': podel,
}
Hodnoty tohoto slovníku jsou funkce, takže výraz jako
slovnik_operaci['+']
teď označuje funkci: dosadí se za něj
funkce secti
. Můžete tedy např. zavolat slovnik_operaci['+'](3, 4)
.
Příklad použití programu (čísla za dvojtečkou doplnil uživatel):
První číslo: 123
Druhé číslo: 456
Operace: +
123 + 456 = 579