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í. Hvězdičkou (⭐) je označena látka nad rámec předmětu Programování 1, kterou tedy teď nemusíte umět, ale někdy v budoucnu se vám může hodit.

1. cvičení

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

  • spustit skript v Pythonu (z IDE)
  • ovládat základní aritmetické operátory (+, -, *, /, //, %), chápat rozdíl mezi / a //
  • chápat proměnnou jako označení místa 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 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 (pomocí int(), float())
  • umět zapsat v programu podmínku (if, else, 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 (append)
  • umět přistupovat k jednotlivým položkám seznamu podle indexu (např. numbers[0])
  • použít len pro získání počtu položek v seznamu
  • použít for 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
  • ⭐ použít f-string (f"") pro formátování textových řetězců

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), práce s existujícím kódem, refaktorování

  • 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 funkcí
  • 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í

MFF GitLab, list comprehensions

  • vytvořit projekt na MFF GitLab, procházet soubory v projektu, zobrazit historii verzí (commitů)
  • ⭐ použít list comprehensions pro vytváření nových seznamů z jiných seznamů

6. cvičení

Objekty, spojové seznamy

  • 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)

7. cvičení

Práce se soubory, PEP8 a linting

  • číst textové soubory
  • zapisovat textové soubory
  • ⭐ 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

8. cvičení

Slovník (dict), standardní knihovna v Pythonu, dědičnost a kompozice

  • použít slovník (dict) pro ukládání hodnot ke klíčům (asociativní pole)
  • 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
    • ⭐ generovat náhodná čísla pomocí modulu random
    • ⭐ načíst nebo vytvořit CSV soubor (tabulka dat) – modul csv
    • ⭐ načíst a zpracovat argumenty z příkazové řádky (sys.argv, modul argparse)
    • ⭐ 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
    • ⭐ umět vytvořit a použít výčtový datový typ (modul enum)
  • ⭐ 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
  • ⭐ umět využít kompozici pro tvorbu složitých objektů pomocí skládání (jednoduchých) objektů

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í

Unit testy, Git, Markdown

  • 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
  • ⭐ umět použít Git pro správu zdrojového kódu (stačí bez větvení a konfliktů)
    • ⭐ 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
  • ⭐ ovládat základy jazyka Markdown (nadpisy, odkazy, …) a umět ho využít pro psaní dokumentace

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, …)