Programování I&II (VŠCHT – ZS+LS 2023/2024)
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!)

Ukázková písemka (LS)
~ písemka (řeší se v počítači s přístupem na internet)

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, CotEditor
~ SQLite: SQLite.org, DB Browser for SQLite
~ regexpy: kiki-re (GUI pro vizuální testování regexpů)

Příklady z hodin

  1. 2023-09-19:
    • Pro nemoc odpadá :-(
  2. 2023-09-26:
    • Pro nemoc odpadá :-(
  3. 2023-10-03:
  4. 2023-10-10:
    • Odpadá – promoce bakalářů.
  5. 2023-10-17:
  6. 2023-10-24:
  7. 2023-10-31:
  8. 2023-11-07:
    • Hodina odpadá, náhradou menší „výzkumná“ práce za domácí úkol ^_^
  9. 2023-11-14:
  10. 2023-11-21:
    • VŠCHT má čtvrtek!
  11. 2023-11-28:
  12. 2023-12-05:
  13. 2023-12-12:
  14. 2023-12-19 (zkouška z loňska):
  15. 2024-02-22:
  16. 2024-02-29:
  17. 2024-03-07:
  18. 2024-03-14:
    • Hodina odpadá, místo ní máte pracnější domácí úkol.
  19. 2024-03-21:
    • Studenti nemůžou ⇒ hodina odpadá.
  20. 2024-03-28:
  21. 2024-04-04:
  22. 2024-04-11:
  23. 2024-04-18:
  24. 2024-04-25:
  25. 2024-05-02:
    • ...
  26. 2024-05-09:
    • ...
  27. 2024-05-16:
    • ...

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

        ~ vstup dat do programu pomocí input() a sys.argv (po slajd 7)
        ~ generátorová notace
        ~ 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ší)
        ~ modul argparse (zpracování parametrů příkazové řádky)
        ~ modul pathlib (objektový přístup k cestám na souborovém systému)
        ~ 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ší ^_~

PS: Co se použití AI týká, zkuste ji prosím letos vynechat. Do budoucna to budeme muset nějak pořešit.


Bodové hodnocení a výsledná známka