Differences

This shows you the differences between two versions of the page.

Link to this comparison view

courses:b4b33rph:cviceni:program_po_tydnech:tyden_08 [2018/11/27 11:14] (current)
Line 1: Line 1:
 +====== Spam I ======
 +  * Dotazy a odpovědi
 +  * Testík
 +  * Vyjasnění a diskuse zadání úlohy Spam filter
 +  * Nastavení projektu pro Spam filter v PyCharmu
 +  * Spouštění testů v PyCharmu
 +  * Vysvětlení a demonstrace testů k úloze Spam filter
 +  * Hádanka
 +  * Příkaz ''​yield''​
 +
 +===== Dotazy a odpovědi =====
 +  * Kolik lidí se pokusilo implementovat funkci ''​read_classification_from_file()''?​ Kolik lidí si myslí, že ji i úspěšně dokončilo?
 +  * Na jaké problémy jste při práci se soubory narazili?
 +  * Připomenutí:​ proč je dobré používat parametr ''​encoding''​ ve volání ''​open(filename,​ mode, encoding='​utf-8'​)''?​
 +
 +
 +
 +===== Hádanka =====
 +> {{page>​courses:​b4b33rph:​internal:​puzzles#​cviceni_8}}
 +
 +===== Programovací testík =====
 +Zadání na interních stránkách.
 +
 +
 +===== Úvod do úlohy Spam filtr =====
 +  * Vyjasnění [[..:​spam:​uvod|diskuze o filtrování spamu z přednášky]],​ odpovědi na otázky
 +  * [[..:​spam:​data|Data a jejich formát]]
 +  * [[..:​spam:​dekompozice|Analýza a dekompozice problému]] na jednotlivé funkční bloky
 +
 +===== Založení projektu a spouštění skriptů v PyCharm =====
 +Pokud někdo stále naráží na problémy, zkuste si přečíst
 +  * [[courses:​b4b33rph:​tutorialy:​python:​pycharm#​zalozeni_projektu_v_pycharm|jak založit projekt v PyCharm]] a/nebo
 +  * [[courses:​b4b33rph:​tutorialy:​python:​pycharm#​spousteni_skriptu_v_pycharm|jak spouštět skripty v PyCharm]].
 +
 +===== Spouštění testů v PyCharm =====
 +> {{page>​..:​..:​tutorialy:​python:​pycharm#​spousteni_testu_v_pycharm&​noheader&​editbtn}}
 +
 +===== Demonstrace testů k úloze Spam filter =====
 +[[http://​docs.python.org/​py3k/​library/​unittest.html]]
 +
 +  * Testy se snažíme psát srozumitelně,​ abyste jejich studiem něco získali.
 +  * Mnoho pomocných funkcí, které u testů jsou, tvoří také zajímavý studijní materiál.
 +  * Uvědomte si, že testy velmi často dělají opak toho, co má dělat váš kód: když má vaše funkce načítat data ze souboru, musí je jiná funkce v testu nejprve vytvořit. Zkuste zde hledat inspiraci k řešení vlastních problémů!
 +
 +==== Testy ke kroku 1 ====
 +Stáhněte si <wrap download>​{{..:​spam:​test1_readclassification.zip|testy ke kroku 1}}</​wrap>​ úlohy Spam filtr. Archiv rozbalte do adresáře, kde vyvíjíte spam filter.
 +  * Zkuste si zdrojový kód testů sami přečíst. Poznamenejte si nejasnosti. Diskutujte o nich se cvičícím.
 +  * Zkuste testy spustit. ​
 +  * Co vám říká výstup? Jaký další (co nejmenší) krok byste udělali na základě výstupu unit testu, abyste se posunuli dál?
 +  * Zkuste tento krok rovnou udělat. Jak se změnil výstup unit testu? Jak další krok byste udělali?
 +  * ...
 +
 +> {{page>​..:​..:​internal:​cviceni:​spam:​krok1#​testy&​noheader&​editbtn}}
 +
 +
 +==== Testy ke kroku 2 ====
 +Zopakujte (podle potřeby) výše uvedené i pro <wrap download>​{{..:​spam:​test2_corpus.zip|testy ke kroku 2}}</​wrap>​.
 +
 +> {{page>​..:​..:​internal:​cviceni:​spam:​krok2#​testy&​noheader&​editbtn}}
 +
 +
 +===== Příkaz ''​yield''​ =====
 +/​*Generátory a ''​yield''​ byly probrány na přednášce 31.10. 2017. Následující byste již měli znát, příklady jste už viděli.*/
 +
 +++++ Iterable, iterator, ''​yield''​ |
 +
 +  * Co jsou "​iterables"? ​
 +    * Iterable je každý objekt, jehož prvky se dají procházet cyklem for. Seznamy, n-tice, řetězce, soubory, atd.
 +  * Co je to generátor?
 +    * Generátor je také "​iterable",​ ale lze ho projít jen jednou.
 +    * Generuje jednotlivé prvky "za pochodu",​ jeden po druhém. Není třeba mít všechny prvky v paměti.
 +  * Co je ''​yield''?​
 +    * Zavoláte-li funkci, která obsahuje ''​yield'',​ **kód uvnitř funkce se nespustí**! Funkce pouze vrátí generátor.
 +    * Vrácený generátor je "​iterable";​ má tedy metodu ''<​nowiki>​__next__</​nowiki>''​ (kterou volá cyklus ''​for'',​ aniž byste o tom věděli).
 +    * Při prvním volání metody ''​next''​ se funkce spustí, dokud nenarazí na první ''​yield''​. Tam se její běh přeruší (ovšem generátor si pamatuje její stav) a argument příkazu ''​yield''​ je vrácen volajícímu kódu.
 +    * Při každém dalším volání metody ''​next''​ se funkce spustí od předchozího ''​yield'',​ dokud nenarazí na další ''​yield''​ nebo na konec funkce, kdy se vyhodí výjimka ''​StopIteration''​.
 +
 +> {{page>​..:​..:​tutorialy:​python:​yield#​yield&​editbtn&​noheader}}
 +
 +++++
 +
 +===== Programovací úlohy =====
 +  * Dokončete [[..:​spam:​krok1|krok 1]] úlohy Spam filtr, tj. funkci ''​read_classification_from_file()''​ tak, aby procházela unit testem.
 +  * Začněte pracovat na [[..:​spam:​krok2|kroku 2]] úlohy Spam filtr, tj. na třídě ''​Corpus''​ a její metodě ''​emails()''​.
 +  ​
 +
 +====== Domácí úkol ======
 +
 +
 +===== Programování =====
 +Pokud se vám to nepodařilo už na cvičení, dokončete:
 +  * [[..:​spam:​krok1|krok 1]] úlohy Spam filtr, tj. funkci ''​read_classification_from_file()''​ tak, aby procházela testy.
 +  * [[..:​spam:​krok2|krok 2]] úlohy Spam filtr, tj. třídu ''​Corpus''​ a její metodu ''​emails()''​ tak, aby procházela testy.
 +
 +===== Příprava =====
 +Příprava na [[..:​spam:​krok3|krok 3]] úlohy spam filtr:
 +> {{section>​..:​spam:​krok3#​priprava&​noheader&​editbtn}}
 +
 +Příprava na [[..:​spam:​krok4|krok 4]] úlohy spam filtr:
 +> {{section>​..:​spam:​krok4#​priprava&​noheader&​editbtn}}
  
courses/b4b33rph/cviceni/program_po_tydnech/tyden_08.txt · Last modified: 2018/11/27 11:14 by xposik