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

Reversi III

Program

  • Diskuze kódu hráče reversi
  • Práce se soubory
  • Programovací úlohy: metody save a load u třídy MyMatrix, počítání znaků v řetězci a souboru
  • Hádanka

Textové soubory

Seznamte se s tématem Práce se soubory. Popisovaný způsob se hodně podobá práci se soubory třeba v jazyku C.

Existuje i objektové rozhraní pro práci s cestami, adresáři a soubory, modul pathlib. Zkuste se podívat na několik krátkých videí o modulu pathlib.

V Pythonu 3 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 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:

with open('soubor.txt', 'rt', encoding='utf-8') as f:
    retezec = f.read()

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

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í:
      >>> 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

Nápověda:

  • K rozdělení řetězce podle určitého znaku můžete použít metodu split.
    >>> s = '1,2,3,4'
    >>> l = s.split(',')
    >>> print(l)
    ['1', '2', '3', '4']

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 get
  • Vytvořte funkci count_chars_in_file(arg), která
    • jako svůj argument přijme jméno textového souboru (cestu k textovému 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.

Hádanka

Domácí úkol

Odevzdání

Nadcházející neděli do 23:59:59 je třeba odevzdat Reversi hráče pro turnaj. specifikace

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 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: 2023/11/20 09:26 by xposik