Warning
This page is located in archive.

Dilema III

Program

  • Řešení DU
  • Diskuze kódu hráče vezňova dilematu
  • Testík
  • Procvičení objektů
  • Hádanka
  • Programovací úlohy: počítání slov v řetězci a souboru, metody save a load u třídy MyVector

Hádanka

(Ne tak úplně) Vězňovo dilema v praxi

Jak splnit zadání úlohy

Několik základních kontrolních bodů, kterých je rozumné se držet:

  • správně pojmenovat soubor
  • správně pojmenovat třídu a metody
  • správné parametry metody (self)!
  • výstup metody
  • správné odsazení
  • neprepisovat vnitřní proměnné

Programovací testík

Zadání na interních stránkách.

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 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.
  • Základy práce se soubory: 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.
  • Další tip na procvičení: Vybavte vaši třídu MyVector metodami save(self, filename) a load(self, filename):
    • metoda save uloží prvky vektoru do textového souboru se zadaným jménem; na každém řádku bude jeden prvek vektoru
    • metoda load načte z textového souboru se zadaným jménem uložená čísla a udělá z nich prvky vektoru.
    • Příklad použití:

>>> a = MyVector([1,2,3,4])
>>> b = MyVector()
>>> a.save('vektor.txt')
>>> b.load('vektor.txt')
>>> a.get_vector() == b.get_vector()
True

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:

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

Domácí úkol

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

Programování

  • Pokuste se naprogramovat funkci read_classification_from_file() pro čtení 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 této funkci k dispozici a ověříme si, že vaše implementace testy splňuje.
courses/a4b99rph/cviceni/program_po_tydnech/tyden_04.txt · Last modified: 2015/10/22 12:15 by volfprem