Table of Contents

Dilema I

Učitelská verze stránky

Výsledky učení

Po tomto cvičení student

Program

Hádanka

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

Lenka

Vězňovo dilema

Na přednášce byl prezentován problém vězňova dilematu. Přečtěte si pozorně zadání úlohy: Vězňovo dilema. Ptejte se na nejasnosti.

Jak splnit zadání úlohy

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

Další známé hry

Další hry ala vězňovo dilema pro vaši inspiraci:

Úkoly na cvičení

For cykly

Seznam a jeho procházení

  1. Vytvořte proměnnou years obsahující seznam několika letopočtů, které jsou pro vás něčím významné, např. roky narození vašich blízkých.
  2. Zjistěte, kolik prvků seznam obsahuje. Jakou funkci Pythonu k tomu použijete?
  3. Vypište jednotlivé letopočty pomocí for-cyklu, každý na jeden řádek. Jaké různé způsoby řešení této úlohy vás napadají?
  4. Upravte kód tak, aby se spolu s letopočtem vypisoval i index prvku v poli. Jaké různé způsoby řešení této úlohy vás napadají?
  5. Zkuste změnit hodnotu proměnné years tak, aby váš kód skončil chybou, nebo se choval z vašeho pohledu neočekávaně. Zkuste porozumět chybové hlášce/důvodu, proč se kód chová právě takto. K porozumění/vysvětlení můžete využít dokumentaci k Pythonu, internetová fóra, i umělou inteligenci.

Funkce pracující se seznamem

  1. Doplňte implementaci následující funkce pro nalezení největšího prvku v kolekci. Je funkce dostatečně specifikovaná? Co ještě potřebujete vědět?
    def find_max(collection):
        """
        Return a tuple: the maximum item found in the collection, and its index
        """
  2. Opět, zkuste změnit hodnotu proměnné years tak, aby funkce find_max selhala nebo vrátila nečekaný výsledek.
  3. Vytvořte obdobnou funkci find_all_max(collection), která nebude vracet jen jeden index maximálního prvku, ale seznam indexů všech výskytů maximálního prvku.

Datové typy

Základní datové typy Pythonu

Jednoduchá třída

Navrhněte a implementujte třídu ComplexNumber.

K rozmyšlení

  1. Čím je instance komplexního čísla definována? Jaké bude mít členské proměnné?
  2. Jaké má vlastnosti?
  3. Jaké má schopnosti? Jaké operace lze dělat s komplexním číslem?

Implementace

Pokuste se třídu implementovat a postupně rozšiřujte její schopnosti. Neděste se, vyučující vám na cvičení ukáží jak na to.

"Dunder" metody

Možnost hezky vypsat komplexní číslo, zjistit jeho velikost, nebo sečíst 2 komplexní čísla pomocí námi definovaných metod je šikovná, ale ještě šikovnější by bylo, kdybychom mohli

Python k tomu nabízí prostředky ve formě tzv. dunder metod (double underscore), kterým se taky někdy říká magické metody, ale nic magického na nich není (viz též oficiální dokumentace). Jsou to metody, které se obvykle nevolají přímo, ale volá je interpret Python v jistých situacích. Jednu z nich už jste poznali - metodu __init__(), kterou Python volá po vytvoření nové instance nějaké třídy a jejímž úkolem je instanci inicializovat.

Pokuste se naši třídu ComplexNumber vybavit těmito metodami:

Domácí úkol

Skalární součin vektorů

Nazapomeňte na vlastní kontrolu kódu, nespoléhejte pouze na kontrolu v BRUTE. Třeba něco jako:

if __name__ == "__main__":
    vec1 = MyVector([1,2,3]) # vektory mohou byt i jine dimenze nez 3!
    vec2 = MyVector([3,4,5]) 
    print(vec1.get_vector()) # priklad ziskani seznamu
    dot_product = vec1*vec2  # vypocet skalarniho soucinu, pretizeny operator *, vola se __mul__
    print(dot_product)       # jen kontrolni vypis

Čtení

Přečtěte zbytek vašeho vybraného Python tutorialu ([Kubias2008] nebo Nauč se Python!). Nemusíte úplně rozumět všemu, ani si pamatovat vše zpaměti. Měli byste mít natrénován postup jak si dohledat potřebné informace, mít natrénovanu práci s např. Python 3 tutoriálem, nebo jiným podobným zdrojem veškeré moudrosti ;-)

Interaktivní cvičení

Na codecademy pokračujte v interaktivním kurzu Pythonu 2 nebo Pythonu 3, pokud k němu máte přístup. Předpokládáme, že otázky, které jste měli po části kurzu z minulého týdne, jste položili na fóru nebo právě dnes na cvičení a že tudíž můžete pokračovat dál sekcemi:

Opět se pokuste dostat co nejdál. Stále platí, že tato cvičení vám mají především pomoci identifikovat věci, kterým nerozumíte. Pokládejte otázky na Discordu, na fóru nebo na cvičení!