Úlohy na procvičení
Funkce
Napište následující funkce. Zkuste doplnit i typové anotace parametrů a návratové hodnoty.
-
Napište funkci
compare(a, b)
, která vrací1
proa > b
,0
proa == b
a-1
proa < b
. -
Napište funkci
is_even(number)
, která přijme celé číslo jako argument a vracíTrue
, je-li číslo sudé, aFalse
, je-li liché. -
Nyní napište funkci
is_odd(number)
, která vracíTrue
, je-li číslo liché aFalse
, je-li sudé. Využijte funkciis_even
. -
Napište funkci, která počítá ciferný součet čísla. Například ciferný součet čísla \(1234\) je \(10\) (protože \(1 + 2 + 3 + 4 = 10\)).
Funkce pro textové řetězce
-
Napište funkci
contains
, která pro zadaný texttext
a znakchar
zjistí, jestlitext
obsahuje znakchar
.
Ručně napište cyklus, který bude procházet přes znaky textu, nepoužívejte operátorin
(pokud ho znáte).>>> contains("banana", "n") True >>> contains("banana", "z") False
-
Napište funkci
count
, která pro zadaný texttext
a znakchar
spočítá, kolikrát se znakchar
vyskytuje vtext
u.
Nepoužívejte metodustr.count
ze standardní knihovny.>>> count("banana", "n") 2
-
Napište funkci
find
, která pro zadaný texttext
a znakchar
zjistí, na jaké pozici se znakchar
poprvé vyskytuje vtext
u. Pokud sechar
vtext
u nevyskytuje, vraťte-1
.
Nepoužívejte metodustr.find
anistr.index
ze standardní knihovny.>>> find("banana", "b") 0 >>> find("banana", "n") 2 >>> find("banana", "z") -1
Odhad \(\pi\) Metodou Monte Carlo
Vytvořte program, který odhadne hodnotu \(\pi\) pomocí metody Monte Carlo.
Mějme čtverec s vrcholy \((0, 0), (0, 1), (1, 1), (1, 0)\) a v něm čtvrt kruhu se středem \((0, 0)\) a poloměrem \(1\). Obsah čtvrtkruhu je \(S_1 = \frac{\pi \cdot 1^2}{4} = \frac{\pi}{4}\), obsah čtverce je \(S_2 = 1^2 = 1\). Z poměru obsahů vyjádříme \(\pi = 4 \cdot \frac{S_1}{S_2}\).
Nyní využijeme metodu Monte Carlo k odhadu obsahů. Budeme náhodně generovat body ve čtverci a počítat, kolik z nich padne dovnitř čtvrtkruhu. Počet bodů ve čtvrtkruhu dělený celkovým počtem vygenerovaných bodů nám dá odhad poměru obsahů \(\frac{S_1}{S_2}\).
Na přednášce se mluvilo také o dekompozici (rozklad na podúlohy). Zkuste se tedy také zamyslet, jaké podúlohy je potřeba vyřešit a každou z nich implementujte jako samostatnou funkci.
Nápovědy:
- Pro vygenerování náhodného čísla z rozsahu \([0, 1]\) použijte
random.uniform(0, 1)
(na začátek souboru musíte napsatimport random
, abyste knihovnurandom
mohli používat). - Pro výpočet vygenerujte \(100\,000\) bodů.
- Pro zjištění, jestli je bod uvnitř kruhu, můžete pomocí Pythagorovy věty spočítat jeho vzdálenost od středu kruhu a porovnat ji s poloměrem.
Více o metodě Monte Carlo najdete třeba na Wikipedii (je tam i řešení v Pythonu, tak na něj zkuste nekoukat a psát kód sami).
Učební výstupy
Učební výstupy podávají zhuštěný souhrn základních konceptů a dovedností, které byste měli umět vysvětlit a/nebo použít po každém cvičení. Hvězdičkou (⭐) je označena látka nad rámec předmětu Programování 1, kterou tedy teď nemusíte umět, ale někdy v budoucnu se vám může hodit.
- chápat funkci jako transformaci dat (vstupy -> výstupy)
- umět definovat funkci a její argumenty, umět zavolat funkci s konkrétními hodnotami argumentů
- umět zdokumentovat funkci (co dělá, význam argumentů, ideálně i typy argumentů a návratové hodnoty)
- ⭐ zapsat dokumentaci funkce jako dokumentační komentář (docstring)
- chápat, že funkce může mít vedlejší efekty (např. výpis na obrazovku)
- umět spustit program v ladícím režimu (debug) a krokovat ho (nastavit breakpoint)