Basic Information
- Anotace (zdroj: SIS)
- Přednášející: Tomáš Holan, Martin Pergel
- Cvičící: Pavel Koupil (pavel.koupil@matfyz.cuni.cz)
- Přednášky
- Rozvrh
- Přednáška: Úterý 10:40 - 12:10 (místnost N1)
- Přednáška: Středa 14:00 - 15:30 (místnost N1)
- Cvičení: Čtvrtek 12:20 - 13:50 (místnosti N8)
- Tabulka s body
Formal Requirements
- Cvičení:
- Účast na cvičení není povinná, ale je silně doporučována
- Na každém cvičení lze za aktivní řešení příkladů získat až 2 body (celkem 24)
- Domácí úkoly:
- Během semestru Vám bude zadáno 10 domácích úkolů
- Řešení domácího úkolu se nahrává do ReCodExu a odevzdávat lze opakovaně
- Na vyřešení domácího úkolu budete mít vždy alespoň 13 dnů
- Za každý vyřešený domácí úkol lze získat až 10 bodů
- Pozdě odevzdané domácí úkoly budou penalizovány -2 body za každý započatý týden zpoždění
- Semestrální práce:
- Během semestru vypracujete zdokumentované a otestované softwarové dílo
- Konkrétní požadavky jsou uvedeny v samostatném PDF (soubor pozadavky_na_semestralni_praci.pdf)
- Za semestrální práci lze získat maximálně 40 bodů. Každý nesplněný požadavek bude penalizován
- Pokud nezískáte alespoň 30 bodů za semestrální práci, máte ještě jeden opravný pokus. V případě opravy musíte získat 35 bodů
- Pokud nezískáte alespoň 30 bodů na první pokus nebo alespoň 35 bodů z opravy, ztrácíte nárok na udělení zápočtu
- Zápočtový test:
- Na konci semestru proběhne praktický programovací test
- Zadávaný a odevzdávaný do ReCodExu
- Čas na vyřešení bude maximálně 90 minut
- Test je třeba splnit na 100% bodů
- Na test budete mít tři pokusy
- Na konci semestru proběhne praktický programovací test
Course Credit
- Odevzdat všech 10 domácích úkolů a získat alespoň 60 bodů za řešení domácích úkolů a aktivitu během cvičení
- Úspěšně odevzdat semestrální práci
- Úspěšně projít zápočtovým testem
Schedule and Study Material
| Date | Content | Supplementary Material | Solution | Homework |
|---|---|---|---|---|
| 5. 10. 2023 | Úvodní cvičení NPRG030_01_Uvod.pdf Požadavky na zisk zápočtu Seznámení se s programovacím prostředím (IDE): Visual Studio Code PyCharm Apache NetBeans Proměnné a základní datové typy Operátory Komentáře Uživatelský vstup a výstup Větvení If...Elif...Else Jak psát kód: Komentáře a dokumentace Popisné názvy proměnných Používání konstant Keep It Simple, Stupid (KISS) Optimalizace kódu pro čitelnost Složité výrazy |
- | Příklad 1.4: Hello World! (soubor hello_world.py) Cvičení 1.5: Triviální kalkulačka (soubor trivial_calculator.py) Cvičení 1.6: Lepší kalkulačka (soubor better_calculator.py) |
- |
| 12. 10. 2023 | Řetězec a seznam NPRG030_02_String_List.pdf Datové typy Řetězec (angl. String) Formátování řetězců Seznam (angl. List) Zadání domácího úkolu |
Odevzdávací systém ReCodEx: Příručka pro nové uživatele ReCodExu (soubor NewUserDoc.pdf) Vytvoření účtu a ověření emailové adresy Nastavení uživatelského profilu Zapomenuté heslo Příručka pro studenty (soubor StudentDoc.pdf) Zařazení do skupiny Členství ve skupině a přehled zadaných domácích úloh Odevzdání řešení Vyhodnocení řešení Zadání domácího úkolu: BMI hodnocení (viz ReCodEx) Termín odevzdání: 26. 10. 2023 23:59 GMT+2 |
Příklad 2.3: Formátování řetězce (soubor registrace.py) Cvičení 2.4: Zřetězení textu (soubory zretezeni_1.py a zretezeni_2.py) Cvičení 2.5: Oprava gramatiky editací řetězce (soubor oprava_textu.py) Cvičení 2.6: Hledání v textu (soubor hledani_v_textu.py) Cvičení 2.7: List (soubor pocet_slov.py) Cvičení 2.8: Indexování listu (soubor indexovani_listu.py) Cvičení 2.9: Editace listu (soubor upravy_listu.py) Cvičení 2.10: Uspořádání slov podle abecedy (soubor usporadani_podle_abecedy.py) Cvičení 2.11: Spojení dvou listů (soubor spojeni_listu.py) |
- |
| 19. 10. 2023 | Cykly WHILE a FOR NPRG030_03_Cykly.pdf Cyklus while Cyklus for Jak psát kód: Použití vestavěných funkcí a knihoven aneb nevymýšlej kolo Vyhněte se hlubokému zanořování smyček a podmíněných příkazů Použití funkce enumerate() Zadání domácího úkolu |
Zadání domácího úkolu: TBD |
Příklad 3.4: Iterace řetězcem a polem (soubor cykly_for.py a cykly_while.py) Cvičení 3.5: Kreslení trojúhelníku (soubor trojuhelnik.py a trojuhelnik2.py) Cvičení 3.6: Generátor hesel (soubor generator_hesel_for.py a generator_hesel_while.py) Cvičení 3.7: Odhad pí metodou Monte Carlo (soubor pi.py) Cvičení 3.8: Caesarova šifra (soubor caesarova_sifra.py) |
- |
| 26. 10. 2023 | NPRG030_04_Funkce.pdf Cvičení 4.7: Refaktorování a zobecnění kódu (soubor refaktoring.py) Funkce Jak psát kód: Don't Repeat Yourself (DRY) You Aren't Gonna Neet It (YAGNI) Zásada jediné odpovědnosti (angl. single responsibility) Stručné a nikoliv komplexní řádky kódu Plochá struktura kódu Omezení délky řádku Používání nápovědy k typu (angl. type hints) Docstrings pro dokumentaci funkcí Early exit Popisné názvy proměnných a funkcí Globální proměnné a jejich vedlejší účinky Kkonzistentní konvence pojmenování Zadání domácího úkolu |
Zadání domácího úkolu: TBD |
Příklad 4.3: Průměrná / minimální / maximální hodnota (soubory aritmeticky_prumer.py a min_max.py) Cvičení 4.4: Řetězec bez samohlásek (soubory retezec_bez_samohlasek.py a retezec_bez_samohlasek_efektivneji.py) Cvičení 4.5: Caesarova šifra (soubor caesarova_sifra_podruhe.py) Cvičení 4.6: Řešení kvadratické rovnice (soubor kvadraticke_rovnice.py) Cvičení 4.8: Násobení matic (soubor nasobeni_matic.py) |
- |
| 9. 11. 2023 | NPRG030_05_Kolekce.pdf N-tice (angl. tuple) Množina (angl. set) Slovník (angl. dictionary) Jak psát kód: Použití množin pro testování členství Existenční a univerzální kvantifikátory Zadání domácího úkolu |
Zadání domácího úkolu: TBD |
Cvičení 5.3: Vzdálenost mezi body (soubor vzdalenost_bodu.py) Cvičení 5.4: Unikátní slova (soubor unikatni_slova.py) Cvičení 5.5: Frekvence slov (soubor frekvence_slov.py) |
- |
| 16. 11. 2023 | Třídy a objekty NPRG030_06_Tridy_A_Objekty.pdf Třídy a objekty Iterátory, generátory a iterable Průchod spojovým seznamem Jak psát kód: Modularita a zapouzdření Výčtové hodnoty Zásady SOLID (single responsibility, open-closed, Liskov substitution, interface segregation, dependency inversion) Volné spojení (angl. loose coupling) Zbytečné přetěžování operátorů Déméteřin zákon (princip minimální znalosti) Dekorátory vlastností Zadání domácího úkolu |
Zadání domácího úkolu: TBD |
Příklad 6.3: Geometrické tvary (soubor geometricke_tvary.py) Cvičení 6.4: Spojový seznam (soubor spojovy_seznam.py) Cvičení 6.5: Iterátor (soubor iterator.py) Cvičení 6.6: Generátor (soubor generator.py) Cvičení 6.7: Iterable (soubory iterable_iterator.py a iterable_generator.py) |
- |
| 23. 11. 2023 | Dědičnost a polymorfismus NPRG030_07_Dedicnost_Polymorfismus.pdf Dědičnost Polymorfismus Kompozice Jak psát kód: Používejte polymorfismus Upřednostněte kompozici před dědičností Zadání domácího úkolu |
Zadání domácího úkolu: TBD |
Cvičení 7.3: Geometrické tvary II (soubor geometricke_tvary.py) Cvičení 7.4: Nalezení největšího a nejmenšího tvaru (soubor polymorfismus.py) Příklad 7.5: Poskládání automobilu z dílů (soubor dopravni_prostredky.py) |
- |
| 30. 11. 2023 | NPRG030_08_Rekurze.pdf Rekurze Jak psát kód: Používejte vyrovnávací paměť pro nákladné operace Zadání domácího úkolu |
Zadání domácího úkolu: TBD |
Cvičení 8.3: Binární vyhledávání rekurzivně (soubory binarni_vyhledavani_rekurzivne.py a binarni_vyhledavani_rekurzivne2.py) Cvičení 8.4: Rekurzivní generování (soubor variace_bez_opakovani.py) Cvičení 8.5: Rekurzivní generování II (soubory aritmeticke_operatory.py a aritmeticke_operatory_se_zavorkami.py) |
- |
| 7. 12. 2023 | Výjimky, logování a ladění kódu NPRG030_09_Vyjimky_Ladeni_Kodu.pdf Cvičení 9.7: Debugging (soubor prumerne_hodnoceni.py) Výjimky Try...Except...Finally Logování a úrovně logování Ladění kódu (angl. debugging) Jak psát kód: Elegantní zpracování výjimek Lokální zpracování výjimek Zadání domácího úkolu |
Zadání domácího úkolu: TBD |
Příklad 9.3: Převod řetězce na číslo (soubor preved_na_cislo.py) Cvičení 9.4: Vyhledání prvku v seznamu (soubor najdi_index.py) Cvičení 9.5: Vytvoření vlastní výjimky (soubor obsah_obdelnika.py) Cvičení 9.6: Logování (soubor preved_na_cislo_logovani.py) |
- |
| 14. 12. 2023 | Práce se soubory NPRG030_10_Soubory.pdf Práce se soubory a správné ošetření pomocí výjimek Formáty CSV, JSON, serializace a deserializace Databázové systémy (čtení a zápis dat z/do databáze) Jak psát kód: Vyhněte se pevnému určení cest k souborům Používejte správce kontextu (angl. context manager) Zadání domácího úkolu |
Doplňkové materiály: osoby.json osoby.csv Zadání domácího úkolu: TBD |
Příklad 10.3: Kontrola existence souboru (soubory existence_souboru.py, existence_souboru2.py a existence_souboru3.py) Cvičení 10.4: Deserializace z JSON souboru (soubory deserializace_json.py, deserializace_json2.py, deserializace_json3.py a deserializace_json4.py) Cvičení 10.5: Serializace objektů do JSON souboru (soubory serializace_json.py, serializace_json2.py a serializace_json3.py) Cvičení 10.6: Serializace a deserializace CSV (soubory prace_s_csv.py, prace_s_csv2.py a prace_s_csv3.py) Příklad 10.7: Práce s databází PostgreSQL (soubor postgresql_priklad.py) |
- |
| 21. 12. 2023 | Testování a moduly NPRG030_11_Testovani_A_Moduly.pdf Testování Modularita programu Jak psát kód: Testování a vývoj řízený testy Zadání domácího úkolu |
Zadání domácího úkolu: TBD |
TBD | - |
| 4. 1. 2024 | Numpy, pandas, scipy, django, matplotlib NPRG030_12_Knihovny.pdf Pip Numpy Pandas Scipy Django Matplotlib |
- | TBD | - |
| 11. 1. 2024 | Zápočtový test, Správa zdrojového kódu Zápočtový test Správa zdrojového kódu (GitLab) |
- | - | - |
Recommended Literature
- TODO