Diskuze: Funkce match v Pythonu

Člen

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Python dělá pattern matching. Zjednodušeně řečeno porovnává co je za
match
(v tomto případě v proměnné volba
) s
jednotlivými case a při první shodě provede kód v case.
Tedy
int
převede na číslo a to se porovná s case 1.if
pod match
blokemNarozdíl od if
, match
umí i toto:
print("Vítejte v kalkulačce")
volba =input("Zadejte dvě čísla a operátor, ve tvaru např. A+B, A-B, apod.: ")
match ([*volba]): # rozdeli napr "1+2" na 1, +, 2
case [x, op, y] if op == '+':
vysledek = int(x) + int(y)
case [x, op, y] if op == '-':
vysledek = int(x) - int(y)
case [x, op, y] if op == '*':
vysledek = int(x) * int(y)
case [x, op, y] if op == '/':
vysledek = int(x)/int(y)
case [x, op, y] if op == '%':
vysledek = int(x)%int(y)
case _:
vysledek = None
if vysledek:
print(f"Výsledek: {vysledek}")
else:
print("Neplatná volba")
print("Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou.")
# Vítejte v kalkulačce
# Zadejte dvě čísla a operátor, ve tvaru např. A+B, A-B, apod.: 5*3
# Výsledek: 15
# Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou.
A když to zjednoduším
match ([*volba]): # rozdeli napr "1+2" na 1, +, 2
case [x, '+', y]:
vysledek = int(x) + int(y)
case [x, '-', y]:
vysledek = int(x) - int(y)
case [x, '*', y]:
vysledek = int(x) * int(y)
case [x, '/', y]:
vysledek = int(x) / int(y)
case [x, '%', y]:
vysledek = int(x) % int(y)
case _:
vysledek = None
Operátor *, v tomto případě aplikovaný na volba
, tedy
*volba
, mi tzv. rozbalí pole na prvky a protože textový
řetězec je v Pythonu jenom pole znaků tak z řetězce tímto způsobem
dostanu jednotlivé prvky v poli, aby to bylo pole a fungovalo to, musím do
dát do hranatých závorek. Je to totéž jako list(volba)
, a to
je asi i čitelnější.
match list(volba): # rozdeli napr "1+2" na 1, +, 2
case [x, '+', y]:
vysledek = int(x) + int(y)
case [x, '-', y]:
vysledek = int(x) - int(y)
case [x, '*', y]:
vysledek = int(x) * int(y)
case [x, '/', y]:
vysledek = int(x) / int(y)
case [x, '%', y]:
vysledek = int(x) % int(y)
case _:
vysledek = None
Zobrazeno 8 zpráv z 8.