Warning
This page is located in archive. Go to the latest version of this course pages.

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]
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