Učební výstupy podávají zhuštěný souhrn základních konceptů a dovedností, které byste měli umět vysvětlit a/nebo použít po každém cvičení.

1. cvičení

operátory, proměnné, vstup, výstup, podmínky

  • spustit skript v Pythonu (z IDE i z příkazové řádky)
  • ovládat základní aritmetické operátory (+, -, *, /, //, %), chápat rozdíl mezi / a //
  • chápat proměnnou jako označené místo v paměti pro ukládání hodnot
  • rozlišovat základní datové typy (textový řetězec, celé číslo, desetinné číslo)
  • uvědomovat si, že aritmetické operátory mohou mít různý význam pro různé datové typy (např. + pro sčítání čísel a zřetězení textových řetězců)
  • načíst řádek vstupu (input())
  • vypsat hodnotu proměnné nebo výsledek výpočtu na výstup (print())
  • umět převést textový řetězec (např. načtený pomocí input()) na číslo
  • umět vytvořit podmínku (včetně else a elif)
  • uvědomovat si, že napsaný program má být pochopitelný nejen pro počítač, ale i pro člověka, který ho bude číst po nás, a tedy záleží na čitelnosti kódu

2. cvičení

seznamy, textové řetězce, cykly

  • umět vytvořit seznam hodnot výčtem (např. numbers = [1, 2, 3]), přidávat hodnoty do seznamu
  • umět přistupovat k jednotlivým položkám seznamu (podle indexu)
  • použít len pro získání počtu položek v seznamu
  • použít for pro cyklus pro procházení položek seznamu
  • použít for a range pro procházení rozsahu čísel
  • použít while cyklus pro opakování, dokud platí podmínka
  • chápat význam while True: a použití klíčového slova break pro ukončení cyklu

3. cvičení

funkce

  • chápat funkci jako transformaci dat (vstupy -> výstupy)
  • umět definovat funkci a její argumenty, umět zavolat funkci s konkrétními hodnotami argumentů
  • umět zdokumentovat funkci (co dělá, význam argumentů, ideálně i typy argumentů a návratové hodnoty), zapsat dokumentaci funkce jako dokumentační komentář (docstring)
  • chápat, že funkce může mít vedlejší efekty (např. výpis na obrazovku)
  • umět spustit program v ladícím režimu (debug) a krokovat ho (nastavit breakpoint)

4. cvičení

DRY (Don’t Repeat Yourself), refaktorování, list comprehensions

  • chápat funkci jako nástroj pro pojmenování části výpočtu (dekompozici kódu)
  • umět nahradit opakující se části kódu funkci
  • umět pracovat s kódem, který napsal někdo jiný (případně umělá inteligence) – spustit ho, ladit ho, hledat v něm chyby

5. cvičení

slovník (dict), práce se soubory

  • použít slovník (dict) pro ukládání hodnot ke klíčům (asociativní pole), chápat rozdíl mezi indexováním do seznamu a do slovníku
  • číst textové soubory
  • zapisovat textové soubory

6. cvičení

knihovny

  • vědět o existenci standardní knihovny (můžeme využít kód, který už za nás naprogramoval někdo jiný) a kde najít dokumentaci
  • zachytit důležité momenty v běhu programu pomocí logovacích zpráv s různou úrovní detailu (debug, info, warning, error) – modul logging
  • použít logovací zprávy pro ladění (bez breakpointů a krokování)
  • umět vytvořit a použít výčtový datový typ (modul enum)
  • načíst a zpracovat argumenty z příkazové řádky (sys.argv, modul argparse)

7. cvičení

(spojové seznamy), objekty, linting

  • umět definovat třídu s datovými položkami a metodami
  • chápat význam metody __init__
  • umět vytvořit novou instanci třídy (objekt)
  • vědět, že proměnné jsou ukazatele do paměti a že více proměnných může ukazovat na ten samý objekt v paměti
  • používat třídy a objekty pro seskupení souvisejících dat (a operací s nimi)
  • používat třídy a objekty pro omezení přístupu k datům a povolení jen vybraných operací – rozlišovat veřejné a privátní (název začíná dvěma podtržítky: __) datové položky a metody
  • chápat význam konstrukce if __name__ == '__main__':
  • vědět o existenci nástrojů pro automatické hledání chyb v kódu (např. pylint, inspekce v IDE PyCharm, …) a umět je spustit na svůj kód
  • dodržovat zvyklosti jazyka (např. velikost písmen ve jménech proměnných), dodržovat doporučený styl (v Pythonu PEP 8)

8. cvičení

Git, dědičnost

  • umět použít Git pro správu zdrojového kódu (stačí bez větvení a konfliktů)
    • vytvořit projekt na MFF GitLab, procházet soubory v projektu, zobrazit historii verzí (commitů)
    • přistupovat ke vzdálenému projektu (např. na MFF GitLabu) ze svého počítače pomocí HTTPS (příkazy git clone, git push, git pull nebo přes UI editoru)
    • uložit novou vývojovou verzi projektu (příkaz git commit nebo přes UI editoru)
    • používat soubor .gitignore pro ignorování souborů, které nechceme v projektu verzovat (např. produkty build systému) a vědět, že existují doporučené .gitignore soubory pro běžně používané jazyky a editory
  • v projektu oddělit prostory pro zdrojové kódy, dokumentaci a produkty build systému
  • umět použít dědičnost pro definici kontraktu, který potomci musí implementovat – abstraktní třída definuje, jaké metody (včetně parametrů a typu návratové hodnoty) musí potomci implementovat; ideálně i umět použít modul abc pro zápis abstraktních tříd

9. cvičení

rekurze

  • umět definovat rekurzivní funkci, nezapomenout podmínku pro ukončení rekurze
  • chápat, že rekurze má omezení (např. velikost volacího zásobníku) a umět hledat alternativní řešení (iterace, použití datové struktury zásobník, …)

10. cvičení

kompozice (dodělávka z 8. cvičení), venv, unit testy

  • umět využít kompozici pro tvorbu složitých objektů pomocí skládání (jednoduchých) objektů
  • umět vytvořit virtuální prostředí (modul venv)
  • umět aktivovat virtuální prostředí, nainstalovat do něj knihovny (pomocí pip) a spustit v něm svůj program
  • napsat aspoň základní unit testy pro ověření funkčnosti funkcí a objektů (moduly unittest nebo pytest)
  • umět spustit existující unit testy a z výstupu poznat, které testy prošly a které ne

11. cvičení

zápočtový test (žádná nová látka)

12. cvičení

grafové algoritmy

  • umět reprezentovat graf v programu (seznam sousedů, příp. matice sousednosti a další reprezentace)
  • umět implementovat základní grafové algoritmy (BFS, DFS) a použít je pro řešení úloh (hledání nejkratší cesty, komponenty souvislosti, …)