Programování I&II (VŠCHT – ZS+LS 2022/2023)
Jiří tečka Znamenáček plus P12 zavináč gmail tečka com

http://studuj.bioinformatiku.cz

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

  1. 2022-09-20:
  2. 2022-09-27:
    • Pro nemoc odpadá :-(
  3. 2022-10-04:
  4. 2022-10-11:
  5. 2022-10-18:
  6. 2022-10-25:
  7. 2022-11-01:
  8. 2022-11-08:
  9. 2022-11-15:
  10. 2022-11-22:
  11. 2022-11-29 (složitější L-systémy):
  12. 2022-12-06 (obrázky PNM):
  13. 2022-12-13 (obrázky PNM binárně):
  14. 2022-12-20:
  15. 2023-02-15:
    • Co nás v letním semestru čeká a nemine ^_~
    • úvod do databází
  16. 2023-02-22:
  17. 2023-03-01:
  18. 2023-03-08:
  19. 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.
  20. 2023-03-22:
  21. 2023-03-29:
  22. 2023-04-05:
  23. 2023-04-12:
  24. 2023-04-19:
    • Pro nemoc v rodině odpadá :-(
  25. 2023-04-26:
    • Pro nemoc přednášejícího odpadá :-(
  26. 2023-05-03:
    • Nejsou studenti, neučí se :-) Mrkněte se místo toho doma na Numpy, příště na to navážeme.
  27. 2023-05-10:
  28. 2023-05-17:

Příklady

  1. Karel ~ základy
              ~ podmínky
              ~ rekurze
  2. seznámení s Python'em
  3. „Želví“ grafika:
           ~ úvod (cykly, iterace po objektech)
           ~ obrazce 1 (funkce, náhodnost)
           ~ obrazce 2 (parametry funkcí) [TODO]
  4. práce s funkcí print()
  5. typy ~ čísla
            ~ řetězce
    práce se soubory
  6. parsování souborů (filmová série)
    typy ~ seznamy
  7. zpracování dat z vícero souborů najednou (hustota obyvatelstva)
    typy ~ slovníky
            ~ množiny
  8. grafický formát PNM:
            ~ šachovnice
            ~ barevné přechody
  9. 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

  1. úvodní slovo & organizace předmětu
  2. Programovací jazyk KAREL:
        ~ KAREL: Úvod do programování & cykly
        ~ KAREL: podmínky
        ~ KAREL: rekurze
  3. 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
  4. Úvod do Python'u:
        ~ Od Karla k Python'u
        ~ „Želví“ (aneb relativní) grafika:
    1. úvod
    2. další vlastnosti
    3. rekurzivní obrazce
    ~ L-systémy (paralelní přepisovací gramatiky):
    1. úvod
    2. další příklady
  5. 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
        ~ …
  6. 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é!)
  7. SQLite:
        ~ obecný úvod do databází
        ~ úvod do SQLite
        ~ SQLite
        ~ SQLite v Python'u
  8. PonyORM:
        ~ vybraná pythoní ORM
        ~ PonyORM
  9. 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ý)
  10. 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
  11. Matplotlib:
        ~ úvod do kreslení grafů
        ~ základy animace
  12. 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…)
  13. Numpy:
        ~ úvod
        ~ tvorba a vlastnosti polí
        ~ základní operace
        ~ „broadcasting“
        ~ základy vektorizace
        ~ výřezy, optimalizace
  14. Pandas:
        ~ ...
  15. 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
        ~ …
  16. Python prakticky II:
         ~ virtuální prostředí: úvod & modul venv
         ~ balíčky prakticky: pip a wheel
         ~ externí nejen balíčkovací systém Conda:
    1. Conda – Víc než Python?
    2. základy práce s Condou (připravil Jiří Novotný)
         ~ práce s Jupyter Notebookem:
    1. úvod, instalace, spuštění
    2. 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:

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:

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