
Úvod do řízení toku programu
Až dosud jsme se naučili základy Pythonu, včetně proměnných a datových typů. Náš kód však zatím běžel lineárně, tedy příkaz za příkazem. V reálných programech ale často potřebujeme, aby se některé části kódu spustily pouze za určitých podmínek nebo aby se opakovaly. K tomu slouží konstrukce pro řízení toku programu: podmínky a cykly.
Podmínky (podmíněné příkazy)
Podmínky nám umožňují vykonat určitý blok kódu pouze tehdy, když je
splněna nějaká podmínka. V Pythonu k tomu používáme klíčová slova
if
, elif
a else
.
Konstrukce if
Nejjednodušší podmíněný příkaz je if
. Blok kódu pod
příkazem if
se provede pouze tehdy, když je podmínka
vyhodnocena jako pravdivá (True).
# Jednoduchá podmínka if
vek = 18
if vek >= 18:
print("Jste dospělý.")
print("Máte právo volit.")
V Pythonu je důležité dodržovat odsazení bloků kódu. Každý řádek pod
příkazem if
, který je odsazen, patří do tohoto
podmíněného bloku a provede se pouze tehdy, když je podmínka splněna.
Konstrukce if-else
Příkaz else
nám umožňuje definovat blok kódu, který se
provede, když podmínka v if
není splněna.
# Podmínka if-else
vek = 16
if vek >= 18:
print("Jste dospělý.")
else:
print("Nejste dospělý.")
Konstrukce if-elif-else
Pokud potřebujeme kontrolovat více podmínek, můžeme použít konstrukci
if-elif-else
. Příkaz elif
je zkratka pro
"else if" a umožňuje kontrolovat další podmínku, pokud předchozí
podmínka není splněna.
# Podmínka if-elif-else
vek = 16
if vek < 13:
print("Jste dítě.")
elif vek < 18:
print("Jste teenager.")
else:
print("Jste dospělý.")
V tomto příkladu se kontroluje postupně každá podmínka. Jakmile je některá podmínka splněna, provede se příslušný blok kódu a zbytek konstrukce se přeskočí.
Vnořené podmínky
Podmínky můžeme také vnořovat, tedy umístit jednu podmínku dovnitř jiné podmínky.
# Vnořené podmínky
vek = 20
je_student = True
if vek >= 18:
print("Jste dospělý.")
if je_student:
print("Jste dospělý student.")
else:
print("Jste dospělý, ale ne student.")
else:
print("Nejste dospělý.")
Logické operátory
V podmínkách můžeme také používat logické operátory pro kombinaci více podmínek:
and
- obě podmínky musí být pravdivéor
- alespoň jedna z podmínek musí být pravdivánot
- negace podmínky
# Použití logických operátorů
vek = 20
je_student = True
if vek >= 18 and je_student:
print("Jste dospělý student.")
if vek < 18 or je_student:
print("Jste buď mladší 18 let, nebo jste student (nebo obojí).")
if not je_student:
print("Nejste student.")
Cykly
Cykly nám umožňují opakovat určitý blok kódu. V Pythonu máme k
dispozici dva typy cyklů: for
a while
.
Cyklus for
Cyklus for
se používá k iteraci přes sekvenci (seznam,
n-tici, řetězec, množinu atd.) nebo jiné iterovatelné objekty.
# Cyklus for procházející seznam
ovoce = ["jablko", "banán", "pomeranč", "hruška"]
for polozka in ovoce:
print(polozka)
# Výstup:
# jablko
# banán
# pomeranč
# hruška
Cyklus for
můžeme také použít s funkcí
range()
, která generuje sekvenci čísel:
# Cyklus for s funkcí range()
for i in range(5): # generuje čísla 0, 1, 2, 3, 4
print(i)
# Můžeme určit počáteční a konečnou hodnotu
for i in range(2, 6): # generuje čísla 2, 3, 4, 5
print(i)
# Můžeme také určit krok
for i in range(1, 10, 2): # generuje čísla 1, 3, 5, 7, 9
print(i)
Cyklus while
Cyklus while
se opakuje, dokud je zadaná podmínka
pravdivá.
# Cyklus while
pocitadlo = 0
while pocitadlo < 5:
print(pocitadlo)
pocitadlo += 1 # zvýšení počítadla o 1
# Výstup:
# 0
# 1
# 2
# 3
# 4
Je důležité zajistit, aby podmínka v cyklu while
byla
někdy nesplněna, jinak by cyklus běžel donekonečna (tzv. nekonečný
cyklus).
Příkazy break, continue a else v cyklech
Python nabízí několik příkazů pro řízení průběhu cyklů:
break - ukončí celý cyklus a program pokračuje příkazy za cyklem.
# Použití break
for i in range(10):
if i == 5:
break
print(i)
# Výstup:
# 0
# 1
# 2
# 3
# 4
continue - přeskočí zbytek aktuální iterace cyklu a přejde na další iteraci.
# Použití continue
for i in range(10):
if i % 2 == 0: # pokud je i sudé
continue
print(i)
# Výstup:
# 1
# 3
# 5
# 7
# 9
else - blok kódu, který se provede po dokončení cyklu
(když cyklus doběhne celý, bez přerušení příkazem break
).
# Použití else v cyklu
for i in range(5):
print(i)
else:
print("Cyklus úspěšně dokončen!")
# Výstup:
# 0
# 1
# 2
# 3
# 4
# Cyklus úspěšně dokončen!
# Pokud dojde k přerušení cyklu pomocí break, else blok se neprovede
for i in range(5):
if i == 3:
break
print(i)
else:
print("Cyklus úspěšně dokončen!") # tento řádek se neprovede
# Výstup:
# 0
# 1
# 2
Praktické příklady použití podmínek a cyklů
1. Kontrola vstupu uživatele
# Program pro kontrolu věku
while True:
try:
vek = int(input("Zadejte svůj věk: "))
if vek < 0:
print("Věk nemůže být záporný. Zkuste to znovu.")
continue
if vek < 18:
print("Jste mladší 18 let. Přístup zamítnut.")
else:
print("Jste dospělý. Přístup povolen.")
break
except ValueError:
print("Neplatný vstup. Zadejte číselnou hodnotu.")
2. Nalezení prvočísel v daném rozsahu
# Program pro nalezení prvočísel
def je_prvocislo(n):
"""Funkce pro kontrolu, zda je číslo prvočíslo."""
if n <= 1:
return False
if n <= 3:
return True
if n % 2 == 0 or n % 3 == 0:
return False
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
return False
i += 6
return True
# Hledání prvočísel v rozsahu 1 až 30
print("Prvočísla v rozsahu od 1 do 30:")
for cislo in range(1, 31):
if je_prvocislo(cislo):
print(cislo, end=" ")
# Výstup: 2 3 5 7 11 13 17 19 23 29
3. Práce s vnořenými cykly - násobková tabulka
# Vytvoření násobkové tabulky
print("Násobková tabulka od 1 do 10:")
# Tisk záhlaví
print(" |", end="")
for i in range(1, 11):
print(f"{i:4}", end="")
print("\n---+" + "----" * 10)
# Tisk těla tabulky
for i in range(1, 11):
print(f"{i:2} |", end="")
for j in range(1, 11):
print(f"{i*j:4}", end="")
print()
4. Výpočet Fibonacciho posloupnosti
# Výpočet Fibonacciho posloupnosti
def fibonacci(n):
"""Funkce pro generování prvních n členů Fibonacciho posloupnosti."""
fib_sequence = []
a, b = 0, 1
for _ in range(n):
fib_sequence.append(a)
a, b = b, a + b
return fib_sequence
# Výpis prvních 10 členů Fibonacciho posloupnosti
pocet_clenu = 10
print(f"Prvních {pocet_clenu} členů Fibonacciho posloupnosti:")
print(fibonacci(pocet_clenu))
# Výstup: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
5. Jednoduchá hra - hádání čísla
# Jednoduchá hra - hádání čísla
import random
def hadani_cisla():
"""Jednoduchá hra, kde uživatel hádá náhodně vygenerované číslo."""
tajne_cislo = random.randint(1, 100)
pokusy = 0
max_pokusy = a0
print("Vítejte ve hře 'Hádej číslo'!")
print(f"Myslím si číslo mezi 1 a 100. Máte {max_pokusy} pokusů.")
while pokusy < max_pokusy:
try:
pokusy += 1
hadane_cislo = int(input(f"Pokus {pokusy}/{max_pokusy}: Zadejte své tipované číslo: "))
if hadane_cislo < 1 or hadane_cislo > 100:
print("Váš tip je mimo rozsah (1-100). Zkuste to znovu.")
pokusy -= 1
continue
if hadane_cislo < tajne_cislo:
print("Vaše číslo je příliš malé.")
elif hadane_cislo > tajne_cislo:
print("Vaše číslo je příliš velké.")
else:
print(f"Gratulujeme! Uhodli jste tajné číslo {tajne_cislo} na {pokusy}. pokus!")
return True
if pokusy == max_pokusy:
print(f"Bohužel, vyčerpali jste všechny pokusy. Tajné číslo bylo {tajne_cislo}.")
return False
except ValueError:
print("Neplatný vstup. Zadejte celé číslo.")
pokusy -= 1
# Spuštění hry
hadani_cisla()
Shrnutí
V tomto článku jste se naučili:
-
Používat podmíněné příkazy
if
,elif
aelse
pro větvení programu -
Kombinovat podmínky pomocí logických operátorů
and
,or
anot
-
Používat cyklus
for
pro iteraci přes sekvence a rozsahy -
Používat cyklus
while
pro opakování kódu, dokud je splněna určitá podmínka -
Řídit průběh cyklů pomocí příkazů
break
,continue
a blokuelse
- Aplikovat tyto koncepty na praktické příklady, jako je kontrola vstupu uživatele, hledání prvočísel, vytvoření násobkové tabulky, výpočet Fibonacciho posloupnosti a jednoduchá hra
Podmínky a cykly jsou základní stavební bloky pro řízení toku programu. Jejich správné použití vám umožní vytvářet komplexnější a interaktivnější programy. V dalším článku se zaměříme na funkce v Pythonu, které vám pomohou organizovat váš kód a znovu použít často používané části kódu.