Těchto pár úkolů slouží k procvičení práce se slovníky.
Napiš 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š 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
Napiš 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: pocet_znaku("hello world")
vrátí {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
Na setkání jsme používali česko-anglický překladový slovník jako tenhle:
{'Jablko': 'Apple', 'Knoflík': 'Button', 'Myš': 'Mouse'}
Napiš funkci, která z česko-anglického slovníku (zadaného argumentem) vytvoří slovník anglicko-český. Můžeš předpokládat, že se každý anglický termín ve slovníku vyskytuje nejvýše jednou. Funkce nesmí měnit původní slovník.
Další úkol kombinuje slovníky se soubory.
Napiš 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š pozpátku (od posledního písmena). (Který typ sekvencí umíš obrátit?)
Využij soubory a formát JSON pro ukládání informací v programech, které už máš hotové.
Vyber si jednu hru, kterou už máš naprogramovanou: Piškvorky (jednodušší) nebo Šibenici (složitější).
Po každém tahu hráče hru ulož: stav hry převeď na JSON a ulož do
souboru stav.json
.
Při spuštění programu načti uložený stav ze souboru. Tedy:
stav.json
:Když hra (nebo, u Šibenice, hádání jednoho slova) skončí,
soubor stav.json
odstraň, aby příští hra
začala zase od začátku.
Na odstranění souboru můžeš 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 trochu netradiční úkol s funkcemi.
Bonusový nepovinný úkol.
Napiš 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ž jsi jednou dělala. Tentokrát ale pro výběr operace použij 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ůžeš 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