Opakování  4. ledna 2023

Materiály

Nejste účastníkem kurzu
Pro zápis do kurzu se nejprve přihlašte a následně použijte tlačítko v přehledu kurzu.

Domácí projekty

Tato lekce obsahuje různé úkoly, které se nám nikde jinde nevešly. Můžeš je řešit v náhodném pořadí a jsou všechny nepovinné. Některé z nich ti mohou zabrat několik hodin. Na všechny tvoje dotazy rádi odpovíme na Slacku nebo si domluv online konzultaci s koučem.

Jedna klasická programovací úloha, která nejspíš pořádně potrápí tvé logické myšlení.

0.

Napiš funkci, která převede římské číslice na arabské (int).

1.

Napiš funkci, která převede arabské číslice na římské.

Dadaistický koutek: procvičení práce se seznamy, řetězci a soubory.

2.

Vyber si básničku, která má aspoň tři sloky po aspoň třech verších. Ulož ji do souboru basnicka.txt. Básničku ulož tak, aby mezi každou slokou byl volný řádek. Můžeš použít třeba kousek Máje od K. H. Máchy nebo některou baladu z Kytice od K. J. Erbena.

3.

Napiš program, který vypíše básničku ze souboru basnicka.txt, ale obrátí pořadí veršů (t.j. jako první vypíše poslední řádek atd.). Nápověda: Každý seznam má metodu reverse, která ho „obrátí”.

4.

Napiš program, který obrátí pořadí slov v jednotlivých verších

5.

Obrať pořadí slok (ty by měly být oddělené jedním prázdným řádkem).

6.

Vypiš slova básně v náhodném pořadí.

Bonusový projekt: Snaž se přitom co nejlépe zachovat strukturu básně (sloky, verše, interpunkci, velká písmena, ...

Několik matematických úkolů:

7.

Suma čísel dělitelných trojkou nebo pětkou¶

Vezmeme li čísla menší než 10 dělitelná beze zbytku trojkou nebo pětkou, dostaneme 3, 5, 6 a 9. Jejich součet je 23. Jaký je součet čísel dělitelných beze zbytku trojkou nebo pětkou v intervalu od 0 do 100?

(Výsledek: 2318)

8.

Prvočísla

Na seznamu prvočísel (2, 3, 5, 7, 11, a 13) je vidět, že šesté prvočíslo je 13. Jaké je sté prvočíslo? A které je na pozici s číslem deset tisíc?

(Výsledek: 104729)

9.

Dělitelnost čísel

2520 je nejmenší číslo, které je beze zbytku dělitelné všemi čísly od 1 po 10. Najděte nejmenší kladné celé číslo, které je beze zbytku dělitelné všemi císly od 1 do 20.

(Výsledek: 232792560)

10.

Prvočíselná dvojčata

Prvočíselné dvojče je taková dvojice čísel, kde obě čísla jsou prvočísla a jedno je o dvě větší než to první. Nejmenší prvočíselné dvojče je 3 a 5. Najdi deset prvních prvočíselných dvojčat!

(Výsledek: 3-5, 5-7, 11-13, 17-19, 29-31, 41-43, 59-61, 71-73, 101-103, 107-109)

Želví kreslení.

11.

Nakresli želvu želvou. Výsledek může vypadat např. takto.

Jedna želva nakreslená želvou

12.

V tomto úkolu bude potřeba trochu hledat v dokumentaci. Cílem je nakreslit želvou obrázek na pozadí nějaké fotky.

Jak na to?

  • Nakresli libovolný tvar (ideálně uzavřený), třeba domeček. Použij pro velikost proměnnou, protože tu budeš určitě měnit.
  • S pomocí dokumentace zjisti, jak tvar vybarvit. Chceš-li si s barvami pohrát více, nastav jinou barvu obrysu a jinou barvu výplně.
  • Najdi si obrázek, který dáš do pozadí, buď vlastní, nebo se podívej na stránku Unsplash.
  • Zjisti, jak dát tento obrázek do pozadí.
  • Je celkem pravděpodobné, že obrázek je příliš velký na to, aby se do okna vešel. Zkus změnit velikost obrázku a/nebo velikost okna.
  • Je-li to nutné, změň velikost objektu.
  • Přesuň objekt, tak aby byl tam, kde ho chceš.

Jedna želva nakreslená želvou

13.

Tento úkol vznikl jako reakce na dotaz jedné účastnice předchozího kurzu Pythonu od PyLadies. Otázka byla: "Šlo by to nějak udělat, že se okno s želvou zavře po stisknutí nějaké klávesy? Třeba K?".

V tomto úkolu tedy odevzdej libovolný obrázek nakreslený želvou (můžeš využít nějaký tvůj předchozí projekt) a zároveň nastav, aby se okno s výsledným obrázkem zavřelo po stisknutí klávesy "k".

Dokumentace bude tvým dobrým kamarádem.

14.

Modul turtle je celkem zajímavý. Např. forward je možno použít dvěma následujícími způsoby.

# Způsob č. 1
from turtle import forward, exitonclick

forward(50)
exitonclick()

nebo

# Způsob č. 2
from turtle import Turtle, exitonclick

zelva = Turtle()
zelva.forward(50)
exitonclick()

V prvním případě je forward funkcí, ale v druhém případě je forward metodou třídy.

Zadání zní: Vytvořte vlastní třídu, která buď dělá něco, co standardní želva neumí, nebo něco, co želva umí, ale pod jiným názvem. Kreativitě se (jako vždy) meze nekladou.

Další úkol se týká kontroly vstupu od uživatele.

15.

Jak to udělat, aby šlo desetinné číslo zadat i s desetinnou čárkou? Cílem je napsat program, který se zeptá uživatele na číslo a vrátí číslo (datový typ int nebo float) a je jedno, zda uživatel použije desetinnou tečku nebo desetinnou čárku. Fungovat tedy musí obě varianty.

Tento úkol navazuje na to, co jsme si ukazovali na lekci o třídách.

16.

Na lekci o třídách jsme si ukázali, jak vytvořít třídu pro koťátka. V rámci tohoto úkolu vytvořte třídu pro kočku, která:

  • umí mňoukat metodou zamnoukej
  • při vytvoření má 9 životů (a nikdy nemůže mít více než 9 a méně než 0)
  • umí říct, zda je nebo není živá (= má 0 životů) metodou je_ziva
  • umí ztratit život metodou uber_zivot
  • může být nakrmena metodou snez, která bere jako argument konkrétní jídlo (řetězec), pokud je toto jídlo ryba, pak se kočce obnoví 1 život (pokud tedy už není mrtvá nebo nemá maximální počet životů)

V lekci o seznamech jste v úkolech tvořili hru "Had". Při pohybu hada v herním poli se na terminálu vždy vypsalo nové herní pole s novým stavem hry.

17.

Zkuste zajistit, jak to udělat, aby na terminálu byl vidět jen poslední stav. Tedy herní pole se nebude vypisovat znovu a znovu s novým stavem, ale bude se v terminálu přepisovat. Vizuálně to pak bude vypadat, jako by se herní pole měnilo. Na internetu zkus najít toto téma pod heslem "How to Clear Screen in Python?".

Přestupný rok.

18.

Napiš program, který na vstupu dostane rok a na terminál vypíše informaci, zda se jedná o přestupný rok. Nejdříve však zkus najít na internetu, podle jakých pravidel se určuje, zda rok bude nebo nebude přestupný.