Informace níže se nevztahují k současnému semestru.
Stránka pro aktuální semestr je zde.
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
lenpro získání počtu položek v seznamu - použít
forcyklus pro procházení položek seznamu - použít
forarangepro procházení rozsahu čísel - použít
whilecyklus pro opakování, dokud platí podmínka - chápat význam
while True:a použití klíčového slovabreakpro 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, modulargparse) - ⭐ 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)
- ⭐ generovat náhodná čísla pomocí modulu
- ⭐ 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
abcpro 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
unittestnebopytest) - 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 pullnebo přes UI editoru) - ⭐ uložit novou vývojovou verzi projektu (příkaz
git commitnebo přes UI editoru) - ⭐ používat soubor
.gitignorepro ignorování souborů, které nechceme v projektu verzovat (např. produkty build systému) a vědět, že existují doporučené.gitignoresoubory pro běžně používané jazyky a editory
- ⭐ přistupovat ke vzdálenému projektu (např. na MFF GitLabu) ze svého počítače pomocí HTTPS (příkazy
- ⭐ 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, …)