Cvičení č. 6 rozšířené o poznámky ze cvičení a řešení některých příkladů (ZS 2026/27)¶

V minulém díle jste viděli...¶

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:

In [ ]:
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:

In [ ]:
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:

In [ ]:
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.

In [3]:
# už umíme:
x = -10
if x < 0:
    abs_hodnota = -x
else:
    abs_hodnota = x
    
print(abs_hodnota)
10
In [1]:
# to samé, ale pomocí podmíněného výrazu:
x = -10
abs_hodnota = -x if x < 0 else x
    
print(abs_hodnota)
10
In [5]:
# už umíme:
vek = 20
if vek >= 18:
    print("jsi plnolety")
else:
    print("nejsi plnolety")
nejsi plnolety
In [7]:
# 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:

In [10]:
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$.

In [13]:
# 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.

In [4]:
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.

In [20]:
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
In [5]:
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.

In [ ]:
 

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.

In [ ]:
 

6. Prvočíselný rozklad¶

Napište program, který vypíše prvočíselný rozklad přirozeného čísla $n$.

In [ ]:
 

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.

In [ ]: