15. diel - Podmienky tretíkrát - Ternárny výraz a prepadávací match
V predchádzajúcom kvíze, Kvíz - Textové reťazce v Pythone, sme si overili nadobudnuté skúsenosti z predchádzajúcich lekcií.
V dnešnom Python tutoriále si predstavíme dve ďalšie konštrukcie,
ktoré súvisia s podmienkami. Konkrétne pôjde o ternárne
výrazy a prepadávanie v konštrukcii
match
. Ide o oddychový tutoriál, ktorým túto tému
dokončíme.
Ternárny operátor
Často sa nám stáva, že niekde potrebujeme nastaviť dve rôzne hodnoty podľa toho, či platí nejaká podmienka.
Príklad - Výpis pohlavia
Predstavme si, že máme napr. pohlavie užívateľa uložené ako
bool
(muž by bol True
) a my by sme ho chceli
previesť do textu. S doterajšími znalosťami by sme napísali asi takýto
kód:
Výstup programu je samozrejme nasledujúci:
Kód je pomerne ukecaný na to, že len prepína medzi dvoma hodnotami. Preto programovacie jazyky často podporujú tzv. ternárny výraz.
Syntax ternárneho výrazu
Pomocou tohto operátora môžeme získať hodnotu podľa platnosti logického výrazu. Zapíšeme ho takto:
Zátvorka pre vyhodnocovaný výraz nie je nutná, je tu len pre prehľadnosť a lepšiu orientáciu. V praxi sa však takmer nepoužíva.
Najprv začína prvni_hodnota
, určená pre prípad, že výraz
je True
. Nasleduje samotný výraz podmienky, ktorý je pre
prehľadnosť umiestnený do nepovinnej zátvorky, a potom else
pre
prípad, že podmienka nadobúda hodnotu False
. Ako ľahké!:)
Názov "ternárny výraz" je odvodený od toho, že má tri
časti (prvú hodnotu, podmienku a druhú hodnotu), preto
ternárne.
Príklad - Výpis pohlavia pomocou ternárneho výrazu
Poďme si ternárny operátor vyskúšať na príklade s pohlavím:
Namiesto
dátového typu bool
samozrejme môžeme do zátvorky napísať
akúkoľvek inú podmienku, napríklad
" plnoletý " if(vek >= 18) else " maloletý "
V
prípade jednoduchých
" plnoletý " if(vek >= 18) else " maloletý "
môžeme zátvorku aj vynechať.
Vnáranie ternárnych výrazov
Ternárne operátory je možné teoreticky zanárať do seba a tým reagovať aj na tri a viac hodnôt. Avšak, vo väčšine prípadov zanáranie skôr kód zneprehľadní. Vznikajú totiž dlhé alebo podivne zalomené riadky a nie je na prvý pohľad vidieť, aká časť sa kedy spustí. Ukážme si, ako by sa pomocou vnorovania ternárnych výrazov vyriešil výpis troch smajlíkov:
Pre príklad vyššie by bolo oveľa lepšie vytvoriť vlastnú metódu, čo si ale ukážeme až v nadväzujúcom kurze Objektovo orientované programovanie v Pythone.
Konštrukcia match
s
prepadávaním
S konštrukciou match
sme sa už stretli v lekcii Podmienky
(vetvenia) druhýkrát: Konštrukcia match. Dnes si ukážeme jej ďalšie
použitie. Python vie v konštrukcii match
využiť jeden
zaujímavý variant, tzv. prepadávanie. Ak potrebujeme vo
viacerých blokoch case
vykonávať rovnaký kód, stačí ich
hodnoty vložiť za seba a oddeliť ich zvislou čiarou |
a
neukončovať každý blok pomocou :
. Celú skupinu tým vyriešime
pomocou jediného case
.
Príklad - Štvrťrok
Predpokladajme, že chceme podľa mesiaca v roku zistiť, aký je štvrťrok.
Pomocou blokov if
a else
by príklad vyzeral
nasledovne:
Ako ale použiť konštrukciu
match
pre takýto príklad? Možno by vás napadol nasledujúci
zápis:
Príklad funguje spoľahlivo, problém však je, že sme si týmto zápisom veľmi nepomohli. Podobnému repetitívnemu kódu by sme sa vždy mali vyhýbať.
Prepadávanie
Skúsme to ešte raz a využime tzv. prepadávanie. Bloky s
rovnakým výstupom sa zjednotia pomocou znaku |
:
Je to oveľa lepšie, než
vypisovať samostatný case
pre každý z 12 mesiacov, že? Výstup
programu potom bude vyzerať nasledovne:
Tento zápis je už oveľa
prehľadnejší. Konštrukcia match
má však pridanú hodnotu v
prípade, keď nemôžeme použiť väčší/menší a ide o zoznam hodnôt, tu
je to skôr redundantný kód plný prázdnych case
.
Prepadávanie používajte v konštrukcii match
len pokiaľ k
nemu máte dobrý dôvod, avšak je dôležité, aby ste ho vedeli čítať,
keď naň niekde narazíte.
V budúcej lekcii, Cyklus while v Pythone , sa budeme ešte venovať cyklom. Naučíme sa
používať while
cyklus a vylepšíme našu kalkulačku.