Cvičení 2019

  • 4.11.2019 Rekurze
    • Faktoriál (rekurzivní i nerekurzivní)
    • Permutace (zpřeházení písmenek ve slově)
    • Problém kufru (matfyzák jede na dovolenou, je mu jedno co si vezme, hlavně aby to vyšlo přesně na 20 kg)
  • 11.11.2019 Rekurze, předávání parametrů do proměnných
    • primitivní typy, předávané kopií (int, str, bool)
      • změny uvnitř funkce neovlivní proměnnou vně funkce
    • referenční typy, předávané odkazem (list, dict)
      • přesněji předána je kopie adresy listu (a list listů obsahuje zase adresy těch vnořených listů...)
      • změny obsahu listu (a[0] = 10) mění i originál (adresa vede na stejný list)
      • změna celého listu (a = [10, 20, 30]) mění adresu (obsah proměnné se přepíše adresou nového listu), originál zůstává nezměněn
    • kopírování
      • žádné (kopíruje se jen adresa)
      • mělké (shallow, b = a.copy() nebo b = a[:]), kopíruje jen první úroveň listu (list v listu je adresa, zkopíruje se jen adresa)
      • hluboké (deep, import copy; b = copy.deepcopy(a)), zkopíruje se všechno do hloubky
    • rozbor domácích úloh
      • u placení mincí je možné buď předávaný list pokaždé zkopírovat, anebo ho změnit před zanořením a změnit zpátky po vynoření (backtracking), neboť jde o jednoduchou úlohu
      • u skákání jezdcem je kopírování příliš neefektivní (jde o složitější úlohu), je třeba držet si list jen jeden, před zanořením ho změnit (poznačit si, kam na šachovnici dělám další krok), a po vynoření ho změnit zpátky (provedený krok zase zrušit)
      • kontrola, zda jsem prošel celou šachovnici (jednoduchá: vždy zkontroluju všechny pozice; lepší: kontroluju všechny pozice jen když už nemám kam jít; ještě lepší: počítám si počet učiněných kroků, znám celkový počet kroků potřebný na projití právě celé šachovnice)
  • 18.11.2019
  • 25.11.2019
    • třídy a objekty, metody, dědičnost
    • lineární spojový seznam
    • úloha: tichá počta lidí, kteří různě komolí to co mají poslat dál
  • 2.12.2019
  • 9.12.2019
    • motivace
    • ošetřování vstupů, hlášení chyb, výjimky, assert
    • úloha: funkce mocnina(zaklad, exponent), měla by kontrolovat vstupy, rozumně hlásit chyby, atd.
    • kód
  • 16.12.2019

Nápady na cvičení

  • nápady na někdy
    • hello world
    • vypsat násobky
    • Colatz conjecture (while, if)
    • obvod a obsah obdélníka
    • vypsat z listu nejdřív sudá a pak lichá čísla
    • BMI
    • fibonacci
    • platba částky mincemi
    • hledat palindromy v textu
    • posoudit žadatele o půjčku
    • generovat zaklínadla CVCVCVCV
    • chatbotíček ala pohádkové dítě (Co je word[-1]?)
    • vypsat písmena/slova 10-20
    • nahradit v textu všechna A za E (pak všechny samohlásky)
    • nahradit v textu každý výskyt slova Babiš za slovo X, každý výskyt slova Zeman za slovo Y
    • vypsat každé 10. slovo z textu
    • převod bin2dec
    • rozklad na prvočísla
    • křížení slov