NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Lekce 8 - Podmínky (větvení) podruhé - Konstrukce match v Pythonu

V minulé lekci, Podmínky (větvení) v Pythonu, jsme si ukázali, jak větvit naše programy v Pythonu.

V dnešním Python tutoriálu se naučíme skládat podmínky pomocí logických operátorů. Následně se podíváme na konstrukci match a vylepšíme naši kalkulačku.

Skládání podmínek

Podmínky je možné skládat, a to pomocí dvou základních logických operátorů:

Operátor Zápis
a zároveň and
nebo or

Uveďme si jednoduchý příklad:

a = int(input("Zadejte číslo v rozmezí 10-20: "))
if a >= 10 and a <= 20:
    print("Zadal jsi správně")
else:
    print("Zadal jsi špatně")

S tím si zatím vystačíme. Operátory se pomocí závorek samozřejmě dají kombinovat:

a = int(input("Zadejte číslo v rozmezí 10-20 nebo 30-40: "))
if (a >= 10 and a <= 20) or (a >= 30 and a <= 40):
    print("Zadal jsi správně")
else:
    print("Zadal jsi špatně")

Často budeme potřebovat posloupnost příkazů else-if. V těchto případech použijeme zkrácené klíčové slovo elif.

Match

Konstrukce match je v Pythonu implementována od verze 3.10. Prakticky vychází z konstrukce switch z jazyků C#, Java a podobných. Umožňuje nám (relativně) zjednodušit zápis více podmínek pod sebou. Vzpomeňme si opět na naši kalkulačku v prvních lekcích, která načetla dvě čísla a vypočítala všechny čtyři operace. Nyní si ale budeme chtít zvolit, kterou operaci má kalkulačka provést. Bez konstrukce match bychom napsali kód podobný tomuto:

print("Vítejte v kalkulačce")
a = float(input("Zadejte první číslo: "))
b = float(input("Zadejte druhé číslo: "))
print("Zvolte si operaci: ")
print("1 - sčítání")
print("2 - odčítání")
print("3 - násobení")
print("4 - dělení")
operace = int(input())

if (operace == 1):
    vysledek = a + b
elif (operace == 2):
    vysledek = a - b
elif (operace == 3):
    vysledek = a * b
elif (operace == 4):
    if b != 0:
        vysledek = a / b
    else:
        print("Nulou nelze dělit!")
        vysledek = "N/A"
if operace > 0 and operace < 5:
    print(f"Výsledek: {vysledek}")
else:
    print("Neplatná volba")
print("Děkuji za použití kalkulačky.")

Po spuštění kalkulačky a zadání hodnot bude vypadat výstup takto:

Kalkulačka bez match:
Vítejte v kalkulačce
Zadejte první číslo: 3.14
Zadejte druhé číslo: 2.72
Zvolte si operaci: 
1 - sčítání
2 - odčítání
3 - násobení
4 - dělení
2
Výsledek: 0.42
Děkuji za použití kalkulačky.

Nyní si zkusíme napsat tentýž kód pomocí konstrukce match:

print("Vítejte v kalkulačce")
a = float(input("Zadejte první číslo:"))
b = float(input("Zadejte druhé číslo:"))
print("Zvolte si operaci:")
print("1 - sčítání")
print("2 - odčítání")
print("3 - násobení")
print("4 - dělení")
volba = int(input())
vysledek = 0.0
match volba:
    case 1:
        vysledek = a + b
    case 2:
        vysledek = a - b
    case 3:
        vysledek = a * b
    case 4:
        if b != 0:
            vysledek = a / b
        else:
            print("Nulou nelze dělit!")
            vysledek = "N/A"

if volba > 0 and volba < 5:
    print(f"Výsledek: {vysledek}")
else:
    print("Neplatná volba")
print("Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou.")

Vidíme, že kód je trochu přehlednější. Pokud bychom potřebovali v nějaké větvi match spustit více příkazů, zapíšeme je k odpovídající větvi do bloku s odsazením. V Pythonu také v konstrukci match není nutný explicitní příkaz pro opuštění konstrukce. Když dosáhneme konce příkazů v dané větvi, zbytek match se přeskočí:

x = 10  # Hodnota pro demonstrování

match x:
    case 10:
        print("Začátek bloku pro hodnotu 10.")  # Všimněme si více příkazů v jedné větvi case
        print("x je rovno 10. ")                # v bloku s odsazením
        print("Konec bloku pro hodnotu 10. Zde dojde k opuštění match.")
    case 20:
        print("x je rovno 20.") #
    case 30:
        print("x je rovno 30.")
    case _:
        print("x má jinou hodnotu.")

Konstrukce match obsahuje ještě nepovinnou možnost case _:. Ta zachytí všechny hodnoty, které neodpovídají žádné z předchozích voleb, a vykoná se "defaultní" akce. Zkrátka a dobře, case _: slouží k obsluze všech ostatních hodnot, které nebyly definovány v předchozích větvích match bloku.

To je pro dnešek vše :)

V následujícím kvízu, Kvíz - Proměnné, podmínky, datové typy v Pythonu, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 215x (2.49 kB)
Aplikace je včetně zdrojových kódů v jazyce Python

 

Předchozí článek
Podmínky (větvení) v Pythonu
Všechny články v sekci
Základní konstrukce jazyka Python
Přeskočit článek
(nedoporučujeme)
Kvíz - Proměnné, podmínky, datové typy v Pythonu
Článek pro vás napsal Vašek Doškář
Avatar
Uživatelské hodnocení:
661 hlasů
Autor pracuje jako pedagog v oblasti elektroniky, elektrotechniky a programování. Rád tvoří appky všeho druhu. Má přehled v jazycích C#, Java, Kotlin, Javascript, Python a Rust
Aktivity