CourseWare Wiki
Switch Term
Winter 2023 / 2024
Winter 2022 / 2023
Winter 2021 / 2022
Winter 2020 / 2021
Winter 2019 / 2020
Winter 2018 / 2019
Older
Search
Log In
b191
courses
b4b33rph
cviceni
program_po_tydnech
tyden_08
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.
View differences:
Side by Side
Inline
Go
Link to this comparison view
Go
Go
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