Příkaz if¶
Příkaz if umožňuje vytvořit blok příkazů, které se provedou, pouze pokud je splněna určitá podmínka.
Příkaz if můžeme rozšířit o další větve – libovolný počet příkazů elif umožňuje ověřovat dodatečné podmínky a poslední větev else se provede, pokud není splněna žádná z předchozích podmínek:
a = 0
if a > 0:
print("číslo je kladné")
print("číslo se rovná", a)
elif a == 0:
print("číslo se rovná 0")
else:
print("číslo není kladné")
print("číslo se rovná", a)
číslo se rovná 0
Příkaz while¶
Příkaz while umožňuje opakovat skupinu příkazů, dokud je splněna vstupní podmínka:
n = 0
while n <= 10:
print(n)
n += 1
0 1 2 3 4 5 6 7 8 9 10
Příkaz for¶
Příkaz for umožňuje opakovat skupinu příkazů pro předem známou sadu hodnot:
for n in range(11):
print(n)
0 1 2 3 4 5 6 7 8 9 10
Podrobnosti k používání podmínek a cyklů¶
Podmíněný výraz¶
Pokud v programu potřebujeme spočítat nějakou hodnotu, která závisí na vyhodnocení nějaké podmínky, můžeme použít buď podmíněný příkaz:
if nějaká_podmínka:
hodnota = výraz1
else:
hodnota = výraz2
nebo můžeme použít podmíněný výraz, což je ternární operace ve tvaru:
hodnota = výraz1 if nějaká_podmínka else výraz2
Podmíněný výraz lze samozřejmě použít všude tam, kde je očekáván nějaký výraz. Může být tedy součástí komplikovanějších aritmetických výrazů a dokonce můžete psát vnořené podmíněné výrazy, čímž se ale značně zhoršuje přehlednost kódu.
# už umíme:
x = -10
if x < 0:
abs_hodnota = -x
else:
abs_hodnota = x
print(abs_hodnota)
10
# to samé, ale pomocí podmíněného výrazu:
x = -10
abs_hodnota = -x if x < 0 else x
print(abs_hodnota)
10
# už umíme:
vek = 20
if vek >= 18:
print("jsi plnolety")
else:
print("nejsi plnolety")
nejsi plnolety
# to samé, ale pomocí podmíněného výrazu:
vek = 15
print("jsi plnolety") if vek >= 18 else print("nejsi plnolety")
nejsi plnolety
Příkazy break a continue¶
Příkazy break a continue slouží pro podrobnější kontrolu provádění cyklů.
Zatímco příkaz break ukončí provádění celého cyklu, příkaz continue způsobí přerušení pouze aktuální iterace a přejde na vyhodnocování vstupní podmínky.
Oba příkazy lze použít uvnitř cyklu while i uvnitř cyklu for.
Příklad: následující program vypisuje čísla větší než 100, která nejsou sudá a skončí, jakmile se vypíše první číslo dělitelné 7:
n = 100
while True:
# pokud je číslo sudé, přejdeme na další iteraci
if n % 2 == 0:
n += 1
continue
# vypíšeme číslo
print(n)
# pokud jsme vypsali číslo dělitelné 7, ukončíme cyklus
if n % 7 == 0:
break
n += 1
101 103 105
Tip: Kliknutím na tlačítko pytutor v rozhraní JupyterLab se zobrazí grafická interpretace toho, co se v programu děje.
Příklady¶
1. Kvadratická rovnice¶
Napište program pro vyřešení kvadratické rovnice $ax^2 + bx + c = 0$, kde čísla $a,b,c$ jsou reálné parametry. Pozor na případy $a = 0$, $b = 0$, a $c = 0$.
# vstupní data - zadá uživatel
a = 1
b = -5
c = 6
# řešení úlohy - musí fungovat pro libovolné vstupní hodnoty
if a == 0:
print("Je to linearni rovnice")
x = -c / b
print("koren:", x)
else:
d = b ** 2 - 4 * a * c
if d > 0:
print("dva realne koreny")
x1 = (- b + d ** 0.5) / (2 * a)
x2 = (- b - d ** 0.5) / (2 * a)
print("koreny:", x1, x2)
elif d < 0:
print("dva komplexni koreny")
x1 = (- b + d ** 0.5) / (2 * a)
x2 = (- b - d ** 0.5) / (2 * a)
print("koreny:", x1, x2)
else:
print("jeden dvojnasobny koren")
x = -b / (2 * a)
print("koren:", x)
dva realne koreny koreny: 3.0 2.0
2. BMI podruhé¶
Napište program, který spočítá BMI uživatele a vypíše, zda má nadváhu, podváhu nebo normální váhu (normální váze odpovídá BMI mezi 18.5 a 25). Dále program napíše uživateli, jaké je jeho rozmezí optimální hmotnosti.
m = float(input("Jaká je tvoje hmotnost (v kg):"))
v = float(input("Jaká je tvoje výška (v cm):"))
v /= 100
bmi = m / (v ** 2)
print("Tvé bmi je", bmi)
if (bmi < 18.5):
print ("Máš podváhu.")
elif (bmi > 25):
print("Máš nadváhu.")
else:
print("Tvoje váha je optimální.")
Tvé bmi je 24.691358024691358 Tvoje váha je optimální.
3. Ověření prvočíselnosti¶
Napište program, který ověří, jestli je vstupní celé číslo $n$ prvočíslo nebo ne.
n = int(input("zadej cislo"))
je_prvocislo = True
if n <= 1:
je_prvocislo = False
else:
for d in range(2, n):
if n % d == 0:
je_prvocislo = False
break
if je_prvocislo:
print(n, "je prvocislo")
else:
print(n, "neni prvocislo")
2 je prvocislo
n = int(input("zadej cislo"))
je_prvocislo = True
if n <= 1:
je_prvocislo = False
else:
for d in range(2, int(n ** 0.5)+1):
if n % d == 0:
je_prvocislo = False
break
if je_prvocislo:
print(n, "je prvočíslo.")
else:
print(n, "není prvočíslo.")
2 je prvocislo
4. Ciferný součet¶
Napište program, který sečte jednotlivé cifry zadaného celého kladného celého čísla.
5. Collatzova posloupnost¶
Napište program, který vypíše Collatzovu posloupnost (do dosažení hodnoty 1) pro dané počáteční přirozené číslo $n$.
Collatzova posloupnost: vezmeme celé kladné číslo $n$. Pokud je $n$ sudé, vydělíme ho dvěma, pokud je $n$ liché, vynásobíme ho třemi a přičteme jedničku, postup opakujeme.
Hypotéza je, že posloupnost pro každé přirozené $n$ nakonec dojde k číslu 1.
6. Prvočíselný rozklad¶
Napište program, který vypíše prvočíselný rozklad přirozeného čísla $n$.
7. Největší společný dělitel (NSD)¶
Napište program, který najde největšího společného dělitele dvou čísel zadaných uživatelem pomocí Euklidova algoritmu.