Differences

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

Link to this comparison view

courses:b4b33rph:cviceni:program_po_tydnech:tyden_07 [2018/11/22 09:02] (current)
Line 1: Line 1:
 +====== Reversi III ======
  
 +===== Program =====
 +
 +  * Diskuze kódu hráče reversi
 +  * Programovací úlohy: metody save a load u třídy MyMatrix, počítání znaků v řetězci a souboru
 +  * Hádanka
 + 
 +
 +===== Programovací úlohy na cvičení =====
 +Programujte samostatně a ptejte se cvičícího. Snažte se o eleganci. Rozmyslete si trochu řešení předem, třeba na papír. ​
 +
 +==== Práce se soubory ====
 +
 +  * Vytvořte třídu ''​MyMatrix'',​ která dostává jeden nepovinný vstupní argument reprezentující matici (2D list).
 +  * Vybavte vaši třídu ''​MyMatrix''​ metodami ''​save(self,​ filename)''​ a ''​load(self,​ filename)'':​
 +    * metoda ''​save''​ uloží prvky matice do textového souboru se zadaným jménem; na každém řádku bude jeden řádek matice a jeho prvky budou oddělené mezerou.
 +    * metoda ''​load''​ načte z textového souboru se zadaným jménem uložená čísla a udělá z nich prvky matice.
 +    * Příklad použití:<​code python>
 +>>>​ a = MyMatrix([[1,​ 2, 3], [2, 3, 4]])
 +>>>​ a.save('​matrix.txt'​)
 +>>>​ b = MyMatrix()
 +>>>​ b.load('​matrix.txt'​)
 +>>>​ a.get_matrix() == b.get_matrix()
 +True
 +</​code>​
 +
 +Nápověda:
 +  * Vzpomeňte na úterní přednášku {{:​courses:​b4b33rph:​prednasky:​files.pdf|Práce se soubory}}
 +  * K rozdělení řetězce podle určitého znaku můžete použít metodu ''​split''​.<​code python>
 +>>>​ s = '​1,​2,​3,​4'​
 +>>>​ l = s.split(','​)
 +>>>​ print(l)
 +['​1',​ '​2',​ '​3',​ '​4'​]
 +</​code>​
 +
 +==== Slovníky ====
 +
 +  * Práce s dictionary: Vytvořte funkci ''​count_chars_in_string(arg)'',​ která: ​
 +    * jako svůj argument přijme textový řetězec a 
 +    * na výstupu poskytne slovník (dictionary) s četností jednotlivých znaků v daném řetězci.
 +    * mohla by vám pomoci třeba metoda ''​[[https://​docs.python.org/​3/​library/​stdtypes.html#​dict.get|get]]''​
 +
 +  * Vytvořte funkci ''​count_chars_in_file(arg)'',​ která ​
 +    * jako svůj argument přijme jméno textového souboru, ​
 +    * otevře jej, načte jeho obsah jako řetězec,
 +    * vytvoří dictionary s četností znaků v tomto řetězci a
 +    * vytvoří textový soubor se stejným názvem, jako měl původní text, ale s příponou ''​.freq'',​ do něhož
 +    * uloží četnost znaků tak, že na každém řádku bude vždy znak a jeho četnost oddělené mezerou.
 +
 +===== Textové soubory =====
 +
 +V Pythonu 3 (oproti Pythonu 2) je zcela přepracována práce s řetězci. Nyní jsou všechny řetězce implicitně v unicode v kódování UTF-8. (Chcete-li používat jen sekvenci bytů, musí se použít nový datový typ ''​bytes''​.) To také znamená, že při načítání textů z textových souborů je třeba specifikovat kódování,​ v němž je textový soubor uložen:
 +
 +<code python>
 +with open('​soubor.txt',​ '​rt',​ encoding='​utf-8'​) as f:
 +    retezec = f.read()
 +</​code>​
 +
 +Argument ''​encoding="​utf-8"''​ používejte vždy, a to při čtení i při zápise. Neuvedete-li ho, Python použije implicitní kódování,​ které je ale závislé na operačním systému. Totožný program se pak může chovat jinak na různých systémech.
 +
 +Více např. zde: [[http://​www.diveintopython3.net/​files.html]]
 +===== Hádanka =====
 +> {{page>​courses:​b4b33rph:​internal:​puzzles#​cviceni_7}}
 +
 +===== Domácí úkol =====
 +==== Odevzdání ====
 +<WRAP important>​
 +Nadcházející neděli do 23:59:59 je třeba odevzdat Reversi hráče pro turnaj. ​
 +[[courses:​b4b33rph:​cviceni:​reversi:​specifikace|specifikace]]
 +</​WRAP>​
 +
 +==== Programování ====
 +
 +  * Pokuste se naprogramovat funkce ''​read_classification_from_file()''​ a ''​write_classification_to_file()''​ pro čtení a zápis dat potřebných pro úlohu SPAM, viz [[..:​spam:​krok1|krok 1]]. Nepotřebujete k tomu znát nic víc než to, co jsme na tomto cvičení procvičili. Příště si ukážeme a vysvětlíme testy, které jsou k dispozici, a ověříme si, že vaše implementace testy splňuje.
courses/b4b33rph/cviceni/program_po_tydnech/tyden_07.txt · Last modified: 2018/11/22 09:02 by xposik