Vlastní funkce (lichý týden)  9. května 2024

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čti.

2.

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

3.

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

Umíš napsat funkci (nebo proceduru)?

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

4.

Napiš 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 zavolej (s různými příjmeními – ty můžeš zadat přímo do kódu při volání funkcí). Výsledky vypiš.

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

5.

Vytvoř funkci pocet_vterin, která bude mít dva argumenty: čas v minutách a čas ve vteřinách a bude vracet celkový počet vteřin.

6.

Napiš proceduru, která vypíše do jednoho řádku prvních 10 násobků zvoleného čísla (argument funkce). Např.: pro vstup 2 vypíše funkce 2, 4, 6, 8, 10, 12, 14, 16, 18, 20.

7.

Změn proceduru z předchozího úkolu tak, aby funkce měla tři argumenty – číslo, počet vypisovaných násobků, znak pro oddělení vypsaných násobků.

Proč používat funkce? Protože ti umožní znovu používat již napsaný kód a udělají tvůj program přehlednější. Nechceme přeci psát ty samé řádky kódu znovu a znovu, raději si usnadníme práci :) V následujících úkolech si procvičíš koncept, kdy je funkce, která vykonává jeden určitý úkol, volána v jiné funkci. Tímto způsobem můžeš zařídit relativně složité chování programu za pomoci pár řádek kódu.

8.

Nejprve si napiš funkci, která rozhodne, jestli zadané číslo je sudé. Funkci si vhodně pojmenuj. Pokud nevíš, jak zjistíš, že dané číslo je sudé, zkus se podívat na operátor modulo % a zamysli se, jak by se dal použít pro vyřešení úkolu.

Potom napiš funkci, která pro zadaný počet n vygeneruje n náhodných čísel, a každé vygenerované číslo vypíše spolu s informací, jestli je liché nebo sudé. Tuto funkci si pojmenuj jednoduše sudost_nahodnych_cisel(pocet).

V hlavním kódu programu funkci sudost_nahodnych_cisel zavolej.

9.

Napiš funkci, která bude mít jako parametr jedno číslo a vrátí "Bum", je-li toto číslo liché, a "Bác", je-li toto číslo sudé.

Pak napiš funkci, která bude mít jako parametr jedno číslo (n) a vypíše n řádek. Na prvním řádku bude "Bum", na druhém "Bác", na třetím "Bum", atd.

Např.

>>> vypis_bum_bac(5)
Bum
Bác
Bum
Bác
Bum
10.

Vytvoř funkci, která spočítá Body Mass Index pro kočky. Vstupem (parametry) funkce bude obvod hrudníku (cm) a délka zadní nohy od kolena ke kotníku (cm). Funkce vrátí číslo feline body mass index (fBMI).

Postup výpočtu fBMI:

  1. Obvod hrudníku vyděl číslem 0.7062 a odečti délku nohy.
  2. Výsledek vyděl číslem 0.9156.
  3. Od výsledku z bodu 2 odečti délku nohy.

Napiš funkci, která na základě hodnoty fBMI rozhodne, jaká kočka je. Čtyři kategorie vychrtlosti nebo sádelnatosti kočky jsou určeny hranicemi 15, 30, a 42. Funkce vrátí textový popis stavu kočky, například 'podvyživená', 'zdravá', 'tlustá', 'jako kopačák'. Použij fantazii a třeba i přidej několik kategorií.

Funkce a jejich parametry vhodně pojmenuj.

Napiš hlavní kód programu, který se uživatele zeptá na parametry kočky a vypíše, jaká kočka je.

11.

Napiš program, který vypíše čísla od jedné do 33, ale:

  • Pokud je číslo dělitelné třemi, napíše místo něj „bum”.
  • Pokud je číslo dělitelné pěti, napíše místo něj „bác”.
  • Pokud je číslo dělitelné pěti i třemi zároveň, napíše místo toho „bum-bác”.

Program vhodně rozděl do funkcí.

12.

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

První hráč hází kostkou (tj. 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í, čtvrtý a nakonec pátý. 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á hodů.

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

13.

Napiš proceduru, která nakreslí pravidelný n-úhelník. Pomocí této funkce nakresli vedle sebe pětiúhelník, šestiúhelník, sedmiúhelník, osmiúhelník.

Vnitřní úhel pravidelného n-úhelníka má 180 × (1-2/n) stupňů.

Aby byly tvary zhruba stejně veliké, použij pro n-úhelník délku strany např. 200/n

mnohoúhelníky

14.

Napiš 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

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áš-li čas, přeskoč je a jen se zamysli, jak bys projekt vyřešila.

15.

Máš-li ráda 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

* tj. jestli nemáš ráda geometrii, tak tenhle úkol přeskoč

16.

Změň funkci ano_nebo_ne z materiálů tak, aby se místo ano 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í. Mezer před nebo za odpovědí může být libovolný počet.

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

Obrázek na konec.

17.

Tento úkol je nepovinný. Procvičuje rekurzi; koukni před ním na příslušné materiály.

Řekni želvě, aby nakreslila tento stromeček. (Instrukce můžeš řá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)

Vlastní nakreslení uděláš ve dvou krocích. Otočíš želvu o 90° doleva (aby se dívala nahoru). Nakreslíš stromeček o délce 200 a úhlu 60.