Co bylo na minulých přednáškách =============================== 26.11.2024: Moduly: * jmenný prostor * dir() * import – možnosti * jak vytvořit modul * proměnná __main__ * Proč vytvářet moduly * cizí moduly: standardní knihovna * balíček - co to je - PyPI * problémy (temná strana) - cizí kód - bugy, verse - zpětná kompatibilita (MS Excel) - dependency hell * virtuální prostředí - venv * Dekompozice funkční, objektová a modulární - příklad s prohledáváním 19.11.2024: * Chyby: syntaktické, běhové, sémantické * typové anotace v Pythonu, mypy, ukázka ve VisualStudiu * Výjimky jako zpráva o běhové chybě - jak číst výpis výjimky //- co se děje, když nastane výjimka (vynořování ze zásobníku volání a try-bloků) - odchycení výjimky: - try-except - except TYP - více except-bloků - except bez typu (nedělat!) - except – proměnná (lokální v except) - vyvolání: raise - Příklad: existence souboru = používat výjimky jen na výjimečné stavy - finally * vlastní vyvolání výjmky - BaseException - vlastní typy * výjmky vs. návratové kódy * Assert * Defenzivní programování * Testy: * příklad PocetDnu( d1,m1,r1, d2,m2,r2 ) * jak testovat? - nahradit ruce - nahradit oči - testovaci funkce a počítání testů a chyb - snadne testovani => hodně testů - testovat okrajové případy - chyby mohou být i v testech... - (někdy) potřebujeme vracet nejenom výsledek, ale i jak-to-dopadlo - výjmky vs. návratové kódy //- TDD: test-driven-development * list(set, dict, tuple)-comprehensions 12.11.2024: * Objekty v Pythonu - pokračování - Funkce definované ve třídě: 1) funkce instance/objektu 2) statická funkce 3) funkce třídy - dekorátory - parametr cls //- TYP je taky objekt - Proměnné definované ve třídě: 1) proměnné instance/objektu 2) proměnné třídy - příklad: počitadlo vytvořených objektů - zmatek: proměnná třídy jako výchozí hodnota proměnné objektu - pokud v něčem nemáte jasno, tak to nepoužívejte! - možnost změnit chování bez (přepisování) zdrojového kódu tak, že vytvoříme novou třídu: - pomocí dědičnosti - pomocí kompozice (obsahuje tu starou) - příklad s želvami - důvod proč objekty: možnost měnit chování bez změny (i bez vlastnictví!) zdrojového kódu odvozením nové třídy a přepsáním (virtuální - viz jiné jazyky) funkce - další důvod proč: místo funkce s mnoha parametry se použijí parametry uložené v objektu, kdo je spokojen, nemusí o nich vědět * textové soubory - soubory jako abstraktní datový typ - ideální představa... ...a (temná) skutečnost - různé konce řádek v různých OS - eof - operace s textovými soubory, proč je potřeba je zavírat * objektová dekompozice, objektový návrh - příklad: úloha s hledáním nejčastějších slov - dependency injection 29.10.2024: * funkce a jejich přístup k proměnným - global a nonlocal * Dynamické proměnné - ukazatel - Halda - Garbage collector * Spojový seznam (jednosměrný, lineární) - Prvek - vytvoření - projití - přidání na začátek - mazání prvního prvku - přidání na konec - ...když si pamatujeme, kde je konec //- mazání posledního prvku * Objekty v Pythonu - znovu a podrobněji - Definice - Funkce a parametr self - Konstruktor - Dědičnost - k čemu je dědičnost - násobná dědičnost - nahrazování pomocí interface - co je interface, viz abstraktní datový typ - volání funkce předka - Polymorfismus - Abstraktní třída - příklad se zvířaty - Duck typing - kontrola typu (type(), isinstance() - komu patří funkce (instanci, třídě, statická) - komu patří proměnná (instanci, třídě) 22.10.2024: * návrh programu shora (dekompozice) a ladění zdola (když něco napíšeme, tak to hned vyzkoušíme) * funkce a IDE - zásobník volání (call-stack) * zkrácené vyhodnocování logických výrazů ...k čemu je to užitečné a jaká to má rizika (když podmínka volá funkce s vedlejším efektem) * formátování kódu - proč užitečné konvence - PEP8 - automatické formátovače - co budeme vyžadovat v Programování-I (2-3 DÚ: 1) jména proměnných 2) ne-opakování 3) rozklad na funkce) * ten příklad z minula (nejčastější slova): - jaké má části a s jakou složitostí pracují - a co bychom mohli zrychlit (potřebujeme lépe ukládat seznam slov) další složitější datové typy: * tuple (n-tice) * dictionary ...a tím bychom mohli zrychlit ten program z minula ...a protože ho máme rozdělený do funkcí, tak nám ho ty změny nerozbijí * Objekty - Společně data a funkce (metody) - Proč - příklad objektové dekompozice - program, který tiskne slova do řádek - Pojmy OBJEKT a TŘÍDA - parametr self (může se jmenovat jakkoli jinak) = veřejné a soukromé (v PY ne tak úplně) členy - konstruktor * příklad: čtečka čísel, která už nepotřebuje GLOBÁLNÍ proměnnou (zbytek) 15.10.2024: * funkce (podprogramy) * příklad tabulka násobilky - formát v příkazu print - formátovací řetězce = neučit se, jen vědět, že to existuje - ...nebo si pomoci sám - f-řetězce * Proč používat podprogramy * Co potřebujeme umět - Jak definovat novou funkci - Jak vracet výsledek - Jak popsat parametry (více možností) - Jak volat funkci - Způsoby předávání parametrů - Viditelnost proměnných (a funkcí) - Funkce B definovaná uvnitř funkce A - Pořadí hledání významu identifikátoru (pravidlo LEGB) - Kdy je funkce známá * Příklad: funkce na čtení čísla z více řádek - globální proměnné a jak se jim vyhnout * Příklad: nejčastější slova v přečteném textu - rozklad na pod-úlohy 1) co potřebujeme? 2) jak to můžeme získat? - návrh "shora", ladění jednotlivých funkcí "zdola" 08.01.2024: * nástroje pro ladění (ve VisualStudiu): krokování, breakpoint, watch, změna obsahu proměnné * Složitější datové typy * Proměnná = ODKAZ na hodnotu = budu připomínat ještě mockrát, zdroj chyb! * String - přístup ke znaku - neměnný – dosadit do znaku nelze - slice - kód znaku * List * For-cyklus * Range * Příklad: hledání údajů ve zdrojovém kódu webové stránky pomocí split(). 01.10.2024: * Předmět NPRG030 Programování I. - Zkouška v létě - Zápočet, podmínky určuje cvičící, obecně docházka, DÚs, zápTest, zápPgm - mj-cvičení pro pokročilé * Co to je programování - Algoritmus, Vlastnosti algoritmu - viz Algoritmizace - Zápis algoritmu => jazyk * Jazyk Python - verse 3 * Nástroje – překladače interpret… - IDLE - IDLE-Editor, uložení, spuštění #- Spuštění .py souboru poklikáním # - Visual Studio # - Krokování # - Náhled proměnné # - Watch * print() * dosazení * input() # - přetypování * řízení běhu programu - if, while - odsazení: tabulátor x mezery - a problém # - VS: Ctrl-R+W = Edit/Advanced/View WhiteSpace * Co by taky šlo: - Re-use = používat to, co už je hotovo - cizí části kódu - příklad: graf aktuálních přírůstků COVID-19 (urlrequest, matplotib) - vynalézači kola vs. lepiči a knihovnáři = potřebujeme kompromis * od začátku: * Hodnoty, typy - Čísla - Int, float * Jednoduché příklady: - sčítání k-tin