Výjimky, moduly & testování  2. května 2019

Materiály

Domácí projekty

0.

Rozděl 1D Piškvorky na čtyři moduly:

  • ai.py, kde bude funkce tah_pocitace,
  • piskvorky.py, kde budou ostatní funkce,
  • hra.py, kde bude import a volání hlavní funkce z piskvorky.py (a nic jiného),
  • test_piskvorky.py, kde budou testy.

Jak se do importů nezamotat? Podívej se do materiálů na sekci cyklické importy.

Pokud jsi byla na workshopu Gitu, dej to do Gitu! A kdybys něco nedopatřením rozbila, git diff HEAD ukáže změny od poslední revize.

1.

Napiš aspoň dva testy na každou funkci z Piškvorek, ke které testy napsat umíš. Testy pravděpodobně neumíš napsat na funkci input a všechny funkce, které ji (byť nepřímo) volají. A taky asi neumíš otestovat účinek funkce print.

Dnešní projekty jsou součástí projektu 1D Piškvorky. Dělej je jeden po druhém.

2.

Zkus program přepsat tak, aby část, která není pokrytá automatickými testy, byla co nejmenší. Místo volání print můžeš často vrátit řetězec a print zavolat až na návratovou hodnotu. Podobně input můžeš zavolat před zavoláním funkce, která pak může příkaz od uživatele brát jako argument.

3.

Doplň funkci tah_pocitace tak, aby brala jako argument symbol, za který má počítač hrát – buď 'x', nebo 'o'. Dopiš testy. Nezapomínáš na Git (pokud jsi byla na workshopu Gitu)?

4.

Ověř, že se funkce tah_pocitace se umí vyrovnat s jinou délkou hracího pole než 20. „Ověření” znamená napsání příslušného testu.

5.

Ověř si, že se tah_pocitace chová rozumně když dostane plné hrací pole, nebo pole s délkou 0. Rozumné chování v tomto případě znamená vyvolání rozumné výjimky.

Podle toho, jak jste se na sraze domluvili, pošli soubor ai.py (s funkcí tah_pocitace) e-mailem (např. organizátorům, koučovi, nebo vůbec). Posílej ho jako přílohu, nekopíruj ho do textu e-mailu. Jestli procházíš kurz sama a můžeš programování konzultovat s někým zkušenějším, je tento úkol na takovou konzultaci ideální téma.

Dozvíš se, jak si tvá strategie stojí proti ostatním – a proti testům, které napíše organizátor. :) Strategii je možné i vylepšovat a poslat několik různých verzí. Neboj se poslat i první nástřel! Stejně tak se neboj funkci poslat, i kdyby ještě nebyla úplně dodělaná.

Na některém dalším srazu bude turnaj o ceny!

Máš-li Piškvorky hotové, můžeš si naprogramovat ještě jednu hru! Jestli na to tedy máš čas a chuť.

6.

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).
  • Nastav výchozí stav: řetězec s tolika podtržítky, kolik je ve vybraném slově písmen.
  • Nastav počet neúspěšných pokusů na nulu.
  • Každý tah:
    • Zeptej se hráče na písmeno.
    • Pokud je to písmeno ve vybraném slově, zaměň příslušná podtržítka za ono písmeno. Bude se hodit řetězcová metoda index_ a funkce zamen z piškvorek.
    • 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.
    • Podle počtu neúspěšných pokusů vypiš „obrázek”. Obrázky jsou ke stažení na http://pyladies.cz/v1/s005-modules/obrazky.txt a můžeš je dát do víceřádkových řetězců (s trojitými uvozovkami).
    • Pokud jsi právě vypsala poslední obrázek, hráč prohrál. Dej mu to najevo a ukonči program.
+---.
|   |
|   O
| --|--
|  /
|
~~~~~~~

p_t__n
7.

Funguje-li ti předchozí hra, můžeš ji vylepšit.

  • Zařiď, aby fungovala 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.