Programování I&II (VŠCHT – ZS+LS 2022/2023)
Jiří tečka Znamenáček plus P12 zavináč gmail tečka com
Pomůcky
Python
~ tahák pro Python 3.x
~ Python Enhancement Proposals (PEPs), především pak PEP 8 -- Style Guide for Python Code
~ PyPI aka Python CheeseShop (repozitář balíčků pro pip)
Komentovaná řešení
~ rozpoznávání samohlásek
~ výpis Fibonacciho posloupnosti
~ součet prvků v seznamu
~ slovník písmen v textu
Ukázkový test (ZS)
~ ukázkový zápočtový test (řeší se na papír bez počítače!)
Nástroje
~ Karel – webová implementace jazyka Karel
~ distribuce Pythonu: Python.org, MiniConda
~ DreamPie – pythoní shell s víceřádkovou historií
~ pythoní IDE: PyScripter, PyCharm (volná verze Community Edition)
~ textové editory: Notepad2, PSPad, Notepad++, Sublime Text
~ SQLite: SQLite.org, DB Browser for SQLite
~ regexpy: kiki-re (GUI pro vizuální testování regexpů)
Příklady z hodin
-
2022-09-20:
-
2022-09-27:
-
2022-10-04:
-
2022-10-11:
-
2022-10-18:
-
2022-10-25:
-
2022-11-01:
-
2022-11-08:
-
2022-11-15:
-
2022-11-22:
-
2022-11-29 (složitější L-systémy):
-
2022-12-06 (obrázky PNM):
-
2022-12-13 (obrázky PNM binárně):
-
2022-12-20:
-
2023-02-15:
- Co nás v letním semestru čeká a nemine ^_~
- úvod do databází
-
2023-02-22:
-
2023-03-01:
-
2023-03-08:
-
2023-03-15:
-
Kvůli vysoké nemocnosti kontaktní hodina odpadá. Místo ní jsem sepsal povídání o ORM v Python'u a máte na ně další domácí úkol.
-
2023-03-22:
-
2023-03-29:
-
2023-04-05:
-
2023-04-12:
-
2023-04-19:
-
Pro nemoc v rodině odpadá :-(
-
2023-04-26:
-
Pro nemoc přednášejícího odpadá :-(
-
2023-05-03:
-
Nejsou studenti, neučí se :-) Mrkněte se místo toho doma na Numpy, příště na to navážeme.
-
2023-05-10:
-
2023-05-17:
Příklady
-
Karel
~ základy
~ podmínky
~ rekurze
-
seznámení s Python'em
-
„Želví“ grafika:
~ úvod (cykly, iterace po objektech)
~ obrazce 1 (funkce, náhodnost)
~ obrazce 2 (parametry funkcí) [TODO]
-
práce s funkcí print()
-
typy ~ čísla
~ řetězce
práce se soubory
-
parsování souborů (filmová série)
typy ~ seznamy
-
zpracování dat z vícero souborů najednou (hustota obyvatelstva)
typy ~ slovníky
~ množiny
-
grafický formát PNM:
~ šachovnice
~ barevné přechody
-
cvičení na funkce
-
…
Domácí úkoly:
ZS,
LS
Nenechávejte si je na poslední chvíli – nebudete stíhat a ještě budete zbytečně bez bodů ^_~
Bloky
-
úvodní slovo & organizace předmětu
-
Programovací jazyk KAREL:
~ KAREL: Úvod do programování & cykly
~ KAREL: podmínky
~ KAREL: rekurze
-
Python prakticky I:
~ potřebné programy a jejich instalace (instalace Python'u, interaktivní interpretr, spouštění programů z příkazové řádky, konzole Dreampie, distribuce MiniConda…)
~ jak pracovat s vícero Python'y na jednom systému
-
Úvod do Python'u:
~ Od Karla k Python'u
~ „Želví“ (aneb relativní) grafika:
- úvod
- další vlastnosti
- rekurzivní obrazce
~ L-systémy (paralelní přepisovací gramatiky):
- úvod
- další příklady
-
Základy Python'u:
~ základní řídicí konstrukce – podmínky, cykly, výjimky, funkce… (slajdy 12-17 o výjimkách pro informaci)
~ pravdivostní typ Boolean (včetně priorit operátorů)
~ použití funkce print()
~ funkce:
základy,
argumenty (parametry)
~ typy:
řetězce,
čísla,
n-tice (tuples),
slovníky,
množiny,
seznamy
~ přehled třídění/řazení v Python'u
~ kuchařka pro práci se soubory
~ generátorová notace
~ vstup dat do programu pomocí input()
a sys.argv
(po slajd 7)
~ kuchařka pro práci s moduly
~ …
-
Pokročilejší koncepty:
~ doc-testy v Python'u
~ práce s binárními daty:
bajtové řetězce,
bajtová pole,
binární soubory
~ serializace datových struktur:
základy
&
modul pickle
~ další vestavěné datové typy: pojmenované n-tice (named tuples), slovníky s výchozími hodnotami (default dicts), modul Counter
~ povídání o typech v různých programovacích jazycích
~ (nejen typové) anotace obecných prvků a funkcí
~ pokročilé funkce: generátory, uzávěry, dekorátory
~ viditelnost a dohledávání jmen (Důležité!)
-
SQLite:
~ obecný úvod do databází
~ úvod do SQLite
~ SQLite
~ SQLite v Python'u
-
PonyORM:
~ vybraná pythoní ORM
~ PonyORM
-
Komunikace po síti, formuláře:
~ Jemný úvod do TCP/IP (aneb „Co všechno se musí (a může) stát, aby prohlížeč zobrazil vyžádanou stránku“)
~ více o protokolu HTTP
~ standard WSGI (zpracování dat z GETu a POSTu na straně serveru pomocí Python'u)
~ formuláře v HTML, element <input>
(připravil Jiří Novotný)
-
Regexpy:
~ formální úvod
~ ukázky
~ řídicí znaky a sekvence . ^ $ * + ? { } [ ] \ | ( )
~ speciální řídicí sekvence \d \D \w \W \s \S \b \B \A \Z …
~ skupiny
~ rozšíření (?=…) (?!…) (?<=…) (?<!…) (?:…) (?#…) …
~ kompilační příznaky I M S A X
~ regexpy v Python'u
-
Matplotlib:
~ úvod do kreslení grafů
~ základy animace
-
třídy (objekty):
~ obecný přehled
~ příklad – třídění a porovnávání
~ jedno z hlavních použití – „magické“ metody
~ úvod (zavedení, atributy, inicializace, dědičnost…)
-
Numpy:
~ úvod
~ tvorba a vlastnosti polí
~ základní operace
~ „broadcasting“
~ základy vektorizace
~ výřezy, optimalizace
-
Pandas:
~ ...
-
Další užitečné informace:
~ kódování textů (aneb „Co na to Unicode“)
~ možnosti výstupu na terminál (především slajdy 3 a 10+)
~ modul textwrap
(zalamování textu a další)
~ grafický formát PNM
~ moduly v Python'u (dosti podrobně)
~ konzole ve Windows: základy ovládání, pokročilejší vlastnosti (barevná výzva apod.)
~ modul random
(pseudonáhodná čísla)
~ binární příznaky (binary flags)
~ generování a přehrávání zvuků na platformě Windows pomocí modulu winsound
~ …
-
Python prakticky II:
~ virtuální prostředí: úvod & modul venv
~ balíčky prakticky:
pip
a wheel
~ externí nejen balíčkovací systém Conda:
- Conda – Víc než Python?
- základy práce s Condou (připravil Jiří Novotný)
~ práce s Jupyter Notebookem:
- úvod, instalace, spuštění
- základy práce
Zápočet
K získání zápočtu musíte odevzdat alespoň polovinu domácích úkolů plus v zimním semestru navíc napsat zápočtovou písemku (píše se na papír) na nadpoloviční počet bodů. Body za domácí úkoly budou (v ZS) tvořit 14 bodů u zkoušky.
a) Domácí úkoly
Domácí úkoly musí být odevzdány do zadání dalšího úkolu (typicky do dvou týdnů). Za každý včas odevzdaný příklad můžete dostat maximálně 2 body. Příklad odevzdaný pozdě už může získat maximálně bod 1 (a to samozřejmě musí fungovat). Musíte odevzdat alespoň polovinu příkladů, abyste měli nárok na zápočet! Příklady odevzdané až o zkouškovém jsou za nula bodů, ale pořád je musíte odevzdat, jinak se rozlučte se zápočtem a tudíž i známkou.
PS: Příkladů za semestr by mohlo být asi tak 7 (a půlka je pak 4 :-), ale pokud jich z nejrůznějších důvodů bude méně, budou body za ně na konci semestru na příslušný počet přepočítány.
b) Teoretická písemka (pouze ZS)
Písemka je teoretická, řešená na papír bez připojení k internetu. Skládá se z:
-
25 otázek, co příklad, to 0 až 2 body [celkových 50 pro známkování přepočítáno na 10 bodů]
-
rozboru předložených kódů programů (jeden Karel, jeden Python) [3+3 body]
Na její vypracování je vyhrazeno (přibližně) 45 minut. Je třeba z ní získat nadpoloviční počet bodů. Náhradní pokusy jsou dva.
Zkouška ZS
Zkouška bude trvat asi 4 hodiny a bude probíhat u počítače a s připojením k internetu (čímž ovšem neříkám, že je opisování povoleno). Její náplní jest:
-
praktické řešení jedné úlohy z Karla [6 bodů]
-
praktické řešení dvou úloh z Python'u [7+7 bodů]
Zkouška LS
Náplň je podobná jako v semestru zimním, ale tentokrát se řeší pouze příklady na Python. Na druhou stranu je to o to složitější, že na sebe navazují, takže když nevyřešíte první, nemůžete vyřešit ani žádný další ^_~
Bodové hodnocení a výsledná známka
- 46-50 : A
- 41-45 : B
- 36-40 : C
- 31-35 : D
- 26-30 : E
- 0-25 : F