Funkce a řetězce  11. března 2019

Materiály

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í. Zkus se zamyslet, jestli jsi „dobře” pochopila otázku.

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)?

4.

Napiš proceduru, která vykreslí domeček dané velikosti. (t.j. velikost se zadá argumentem)

domečky

5.

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 funkci tangens. Pozor, funkce tan vrací výsletek v radiánech; je potřeba ho převést na stupně (from math import degrees).

domečky

* t.j. jestli nemáš ráda geometrii, tak tenhle projekt přeskoč

Procvičení řetězců.

6.

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 několikrát zavolej (s různými příjmeními) a výsledky vypiš.

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

7.

Najdi na internetu text své oblíbené písně, zkopíruj si ho do řetězce a zjisti, kolikrát je v něm použito písmeno K.

Následující sada projektů procvičuje různá použití cyklu for.

8.

Pomocí cyklu for a funkce range() napiš program, který vypíše:

a
a
a
a
9.

Pomocí cyklu for napiš program, který vypíše:

Řádek 0
Řádek 1
Řádek 2
Řádek 3
Řádek 4
10.

Jak jsi pojmenovala proměnnou, kterou jsi v minulém příkladu použila? Vymysli pro ni název, který nejlépe vystihuje, co proměnná obsahuje.

Je důležité proměnnou pojmenovat výstižně, jinak se v dalších projektech můžeš ztratit. Možné řešení je uvedeno na konci zadání.

11.

Pomocí cyklu for napiš program, který vypíše:

0 na druhou je 0
1 na druhou je 1
2 na druhou je 4
3 na druhou je 9
4 na druhou je 16

Jak pojmenuješ proměnnou cyklu?

12.

Pomocí cyklů for a parametru end pro print napiš program, který postupně z jednotlivých 'X' vypíše:

X X X X X
X X X X X
X X X X X
X X X X X
X X X X X

„Z jednotlivých 'X'“ znamená, že nepoužiješ např. print('X X X X X').

Jak pojmenuješ proměnnou cyklu? A tu druhou?

13.

Napiš program, který vypíše „tabulku“ s násobilkou.

0 0 0 0 0
0 1 2 3 4
0 2 4 6 8
0 3 6 9 12
0 4 8 12 16
14.

Napiš program, který postupně z jednotlivých 'X' vypíše:

X
X X
X X X
X X X X
15.

Pomocí cyklu for a příkazu if napiš program, který vypíše následující řádky. Funkci print volej pouze uvnitř v cyklu:

první řádek
není první
není první
není první
16.

Pomocí cyklů for a příkazu if napiš program, který z jednotlivých 'X' a mezer vypíše:

X X X X X X
X         X
X         X
X         X
X         X
X X X X X X
17.

Předchozí programy z této sekce uprav tak, aby počet řádků (či velikost čtverce/trojúhelníku/tabulky) mohl zadat uživatel.

Následující sada projektů ti ukáže zajímavou vlastnost řetězců. Zpomal a zamysli se.

18.

Co dělá tenhle kód?

for c in 'Ahoj světe!':
    print(c)
19.

Vymyslíš lepší jméno pro proměnnou c z minulé úlohy?

20.

Co dělá tenhle kód?

for c in 38:
    print(c)

Máme tu i tradiční hru!

21.

Vytvoř hru sibenice podle následujícího popisu. Snaž se projekt rozdělit do funkcí a modulů s hezkými jmény, piš testy a dokumentační řetězce, funkční kousky dávej postupně do Gitu.

  • Počítač náhodně zvolí slovo (zatím třeba ze tří možností). Pro jednoduchost používej malá písmena a nepoužívej slova, ve kterých se stejné písmeno opakuje dvakrát (třeba čokoláda).

    Zkus třeba slova: trávník, stromek, stavení.

  • Výchozí stav je řetězec s tolika podtržítky, kolik je ve vybraném slově písmen.

  • Výchozí počet neúspěšných pokusů je nula.

  • Stále dokola:

    • Zeptej se hráče na písmeno.
    • Pokud je to písmeno ve vybraném slově, zaměň ve stavu příslušná podtržítka za ono písmeno. (Bude se hodit řetězcová metoda index. a funkce zamen ze srazu.)
    • Pokud dané písmeno není ve vybraném slově, započítej neúspěšný pokus.
    • Vypiš stav (slovo s případnými podtržítky).
    • Pokud už ve slově nejsou podtržítka, pogratuluj hráči a ukonči hru.
    • Vypiš počet neúspěšných pokusů a odpovídající obrázek. Funkci, která ti vrátí obrázek podle počtu pokusů, si můžeš stáhnout z Gistu
    • Pokud je počet neúspěšných pokusů 9 (nebo víc), hráč prohrál. Dej mu to najevo a ukonči program.

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, zkus se ale aspoň zamyslet, jak bys projekt vyřešila.

22.

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

23.

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í.

Textů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áš-li čas, přeskoč je.

24.

Funguje-li ti hra sibenice, můžeš ji vylepšit.

  • Zařiď, aby fungovala pro slova s více stejnými písmeny.
  • Když hráč nezadá písmeno (zadá např. ABC nebo !), nepovažuj to za tah.
  • Po skončení dej hráči možnost hru opakovat.
25.

Napiš 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, kdo vede.