Podmínky a cykly: Řízení toku programu

Podmínky a cykly v Pythonu

Ú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:

# 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:

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.