Základy programování & Aplikované programování (VŠCHT – ZS+LS 2024/2025)
21P+kecanemanZ.iriJ

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 a písemka (ZS)
~ ukázkový zápočtový test (řeší se na papír bez počítače!)
~ písemka (řeší se v počítači s přístupem na internet)

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. 2024-09-17:
    • karel.k – ukázkové příkazy Karla z hodiny
    • řešení problému Hanojských věží pomocí Karla (neznámý autor)
    • program.py – superjednoduchý program v Pythonu
  2. 2024-09-24:
    • Z důvodu nemoci hodina bohužel odpadá :-(
  3. 2024-10-01:
    • Z důvodu nemoci hodina bohužel odpadá :-(
  4. 2024-10-08:
  5. 2024-10-15:
  6. 2024-10-22:
  7. 2024-10-29:
    • Hodina odpadá! Náhradou domácí úkol ^_~
  8. 2024-11-05:
  9. 2024-11-12:
  10. 2024-11-19:
  11. 2024-11-26:
  12. 2024-12-03:
  13. 2024-12-10:
  14. 2024-12-17:
    • Hodina odpadá! Ne všichni tady mohou být. Tudíž pokračování v letním semestru ^_~

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 & chemické prvky)
    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
  10. cvičení na Numpy:
            ~ základní grafické operace
            ~ konvoluční filtry
            ~ steganografie

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. Odbočka kvůli FITu – instalace a používání Pythonu:
  3. Programovací jazyk KAREL:
        ~ KAREL: Úvod do programování & cykly
        ~ KAREL: podmínky
        ~ KAREL: rekurze
  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. Kódování textů a funkce print():
        ~ kódování textů (aneb „Co na to Unicode“)
        ~ možnosti výstupu na terminál (především slajdy 3 a 10+)
  6. 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
        ~ …
  7. Binární data:
        ~ motivace: grafický formát PNM
        ~ práce s binárními daty: bajtové řetězce, bajtová pole, binární soubory
  8. Pokročilejší koncepty:
        ~ doc-testy v Python'u
        ~ 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é!)
  9. SQLite:
        ~ obecný úvod do databází
        ~ úvod do SQLite
        ~ SQLite
        ~ SQLite v Python'u
  10. PonyORM:
        ~ vybraná pythoní ORM
        ~ PonyORM
  11. 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ý)
  12. 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
  13. Matplotlib:
        ~ úvod do kreslení grafů
        ~ základy animace
  14. 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…)
  15. Numpy:
        ~ úvod
        ~ tvorba a vlastnosti polí
        ~ základní operace
        ~ „broadcasting“
        ~ základy vektorizace
        ~ výřezy, optimalizace
  16. Pandas:
        ~ ...
  17. Další užitečné informace:
        ~ 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)
        ~ moduly v Python'u (dosti podrobně)
        ~ 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
        ~ …
  18. Python prakticky – co se výše nevešlo:
         ~ virtuální prostředí: úvod & modul venv
         ~ balíčky prakticky: pip a wheel

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 praktické řešení pěti úloh z Python'u (přibližně po čtyřech bodech za úlohu; případně podle obtížnosti).

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

Zkouška LS

Náplň je podobná jako v semestru zimním, ale je to složitější o to, že příklady na sebe (obvykle) 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