Dilema III

Výsledky učení

Po tomto cvičení student

  • umí naprogramovat jednoduchou třídu v Pythonu a umí ji vybavit potřebnými metodami;
  • chápe, jak má vypadat třída hráče vězňova dilematu a k čemu slouží její metody; má jasný plán, co má jeho hráč umět a jak to naimplementuje;
  • umí vytvářet a procházet 2D pole v Pythonu (seznam seznamů).

Program

  • Řešení DU
  • Krátký programovací testík
  • Poslední diskuze nad kódy hráče vezňova dilematu
  • Hádanka
  • Práce s 2D daty

Diskuse k domácímu úkolu

  • Dotazy k řešení DÚ (třída MyVector, metody is_perpendicular_to a cross_product)
  • Diskuse očekávaného řešení
  • Jak otestovat správnost metody cross_product?

Programovací testík

Zadání 2. testíku se dozvíte na cvičení.

Hádanka

Zadání hádanky se dozvíte na cvičení.

Diskuse k vězňovu dilematu

  • Poslední možnost na cvičení probrat hráče PD. Připravte si dotazy na zbývající nejasnosti!

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

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.

  • Vytvořte funkci na výpis dvourozměrného seznamu(listu) print_data(data):
    • Funkce má jako parametr libovolně velký, dvourozměrný seznam čísel. Můžete předpokládat, že všechny řádky jsou stejně dlouhé. Testovací matici si nejprve vytvořte ručně.
    • Funkce by měla vypisovat seznam “čitelně” - tak, aby bylo zřejmé v jakém je dané číslo řádku a sloupci.
  • Vytvořte funkci generate_data(n_rows, n_cols), která vytvoří dvourozměrný seznam s n_rows řádky a n_cols sloupci s náhodným rozmístěním nul a jedniček, například pomocí funkce (randint)
    • otestujte funkci print_data(data) na vytvořeném seznamu

Pokud jste hotoví, začněte pracovat na programovací úloze z domácího úkolu.

Domácí úkol

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

Programování

  • Pokuste se naprogramovat funkci line_size(r, c, data), která bude počítat velikost oblasti v řádku zaměřeném pozicí r, c (row, column). Oblastí je myšlena nepřerušovaná část 2D seznamu (v tomto případě řádku) se stejnou hodnotou v okolí zadané pozice, tedy stejnou hodnotou jako je v data[r][c]. Parametr data je dvourozměrný seznam nul a jedniček, r určuje řádek a c sloupec odkud se má velikost oblasti počítat. Hodnota oblasti (buď 0 nebo 1) je určena hodnotou data[r][c]. Návratovou hodnotou funkce je počet jedniček nebo nul v dané oblasti.
  • Rozmyslete jak by se dala funkce napsat tak, aby mohla případně počítat nejen v řádcích ale v obecném směru - (sloupcích, na diagonále).
  • Příklad:
    r = 5
    c = 5
    data = [
    [0, 1, 1, 1, 1, 0, 0, 0 ],
    [1, 1, 0, 1, 0, 1, 1, 1 ],
    [0, 1, 1, 0, 0, 1, 0, 1 ],
    [1, 1, 1, 0, 1, 1, 0, 1 ],
    [0, 1, 0, 0, 0, 0, 1, 1 ],
    [1, 0, 1, 1, 0, 0, 0, 0 ],
    [0, 1, 1, 1, 0, 1, 1, 1 ],
    [1, 1, 0, 1, 0, 1, 1, 1 ]]
    reg_size = line_size(r , c, data)
    print(reg_size)
    4
courses/b4b33rph/cviceni/program_po_tydnech/tyden_04.txt · Last modified: 2024/10/21 10:49 by xposik