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

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