Vlastní funkce  22. března 2021

Materiály

Nejste účastníkem kurzu
Pro zápis do kurzu se nejprve přihlašte a následně použijte tlačítko v přehledu kurzu.

Domácí projekty

Na začátek trocha teoretického opakování.

0.

Co dělá funkce print?

1.

Co vrací funkce print?

Trocha experimentování. Zadání si prosím pořádně přečtěte.

2.

Co se stane, když tělo nějaké funkce necháte úplně prázdné? Zkuste vysvětlit proč. (Tělo funkce je odsazený blok za dvojtečkou)

3.

Co se stane, když necháte úplně prázdné tělo cyklu? Zkuste vysvětlit proč.

Umíte napsat funkci (nebo proceduru)?

Pozor na slovíčka jako „vrátit“ a „vypsat“, která říkají co máte dělat.

4.

Napište funkci, která jako argument bere příjmení uživatelky/uživatele a zkusí podle něj uhodnout její/jeho pohlaví. To vrátí jako řetězec.

Funkci v programu několikrát zavolejte (s různými příjmeními – ty můžete zadat přímo do kódu při volání funkcí). Výsledky vypište.

(Pohlaví není možné určit přesně – stačí zvládnout ta nejčastější česká příjmení.)

Program který tohle dělá už máte – úkol spočívá v tom, že z něj správný kousek „zabalíte“ do funkce.

5.

Napište proceduru, která vykreslí domeček dané velikosti. Velikost se zadá jako argument, např:

vykresli_domecek(30)
vykresli_domecek(40)
vykresli_domecek(80)

Proceduru v programu několikrát zavolej (s různými velikostmi).

domečky

6.

Má-li někdo z vás rád geometrii, může zkusit dávat domečkové proceduře dva argumenty: šířku a výšku. Je potřeba si vzpomenout na Pythagorovu větu a na goniometrické funkce. Konkrétně funkci arkus tangens* from math import atan.

Pozor, funkce atan vrací výsledek v radiánech; je potřeba ho převést na stupně (from math import degrees).

domečky

* t.j. jestli nemáte rádi geometrii, tak tenhle úkol přeskočte

Procvičení programování. Často je jednoduché něco napsat, ale dotažení do konce může být časově náročné. Tyto úkoly jsou nepovinné. Nemáte-li čas, zkuste úkoly rozdělit mezi členy týmu (aby nedělal každý člen každý úkol), nebo je přeskočit a jen se zamyslet, jak byste projekt vyřešili.

7.

Změň program Kámen, Nůžky, Papír tak, aby opakoval hru dokud uživatel nezadá slovo konec.

8.

Změň funkci ano_nebo_ne tak, aby se místo ano se dalo použít i a, místo ne i n a aby se nebral ohled na velikost písmen a mezery před/za odpovědí.

Odpovědím jako možná nebo no tak určitě by počítač dál neměl rozumět.

Teď několik programovacích oříšků pro dlouhé chvíle. Jsou nepovinné. Nemáte-li čas, zkuste je opět rozdělit mezi členy týmu (aby nedělal každý člen každý úkol), nebo je přeskočit a jen se zamyslet, jak byste projekt vyřešili.

9.

Funguje-li vám hra sibenice, můžete ji vylepšit.

  • Pokud hráč nezadá přesně jeden znak (tj nezadá nic nebo zadá víc znaků), vynadejte mu, ale nepočítejte to jako pokus.
  • Použijte funkci zamen (místo toho, aby byl příslušný kód přímo v hlavním programu).
  • Po vypsání počtu neúspěšných pokusů vypište obrázek. Funkci, která vrátí obrázek podle počtu pokusů, si můžete zkopírovat z Gistu
  • Když hráč nezadá písmeno (zadá např. !), nepovažujte to za tah.
  • Zařiďte, aby hra fungovala pro slova s více stejnými písmeny (např. čokoláda).
  • Po skončení dejte hráči možnost hru opakovat.

Jednotlivá vylepšení dělejte jednotlivě a v odpovědi napište, která jsou hotová a která rozpracovaná. Jakmile nějaké vylepšení začne fungovat, program odevzdejte! Je možné odevzdat několik verzí.

10.

Napište program, který simuluje tuto „hru“:

První hráč hází kostkou (t.j. vybírají se náhodná čísla od 1 do 6), dokud nepadne šestka. Potom hází další hráč, dokud nepadne šestka i jemu. Potom hází hráč třetí a nakonec čtvrtý. Vyhrává ten, kdo na hození šestky potřeboval nejvíc hodů. (V případě shody vyhraje ten, kdo házel dřív.)

Program by měl vypisovat všechny hody a nakonec napsat, kdo vyhrál.

Nápověda: průběžně stačí ukládat jen údaj o tom, kdo vede a kolik má bodů.

Tip: Program si napište napřed v češtině; pak ho přeložte do Pythonu.

Obrázek na konec.

11.

Tento úkol je nepovinný. Procvičuje rekurzi; koukněte před ním na příslušné video.

Řekněte želvě, aby nakreslila tento stromeček. (Instrukce můžete řádek po řádku přeložit do Pythonu.)

Rekurzivní želví stromek

  • Stromeček dané délky a úhlu se kreslí takto:

    • (Malý stromeček je jen jedna větvička.) Je-li délka menší než 20:
      • Pohni se dopředu o danou délku.
      • Otoč se zpátky, o 180°
      • Pohni se dopředu o délku (aby želva byla na stejném místě jako na začátku)
      • Otoč se zpátky, o 180° (aby se želva dívala stejným směrem jako na začátku)
    • Jinak (je stromeček rozvětvený):
      • Pohni se dopředu o polovinu délky (nakreslíš tak kmen)
      • Otoč se doprava o úhel
      • Nakresli stromeček s poloviční délkou (delka/2) a dvoutřetinovým úhlem (uhel*2/3)
      • Otoč se doleva o úhel
      • Nakresli stromeček s poloviční délkou a dvoutřetinovým úhlem
      • Otoč se doleva o úhel
      • Nakresli stromeček s poloviční délkou a dvoutřetinovým úhlem
      • Otoč se doprava o úhel
      • Otoč se zpátky, o 180°
      • Pohni se dopředu o polovinu délky (aby želva byla na stejném místě jako na začátku)
      • Otoč se zpátky, o 180° (aby se želva dívala stejným směrem jako na začátku)
  • Otoč želvu o 90° doleva (aby se dívala nahoru)

  • Nakresli stromeček o délce 200 a úhlu 60.