Lekcie
Podmienky II. - vetvenie a komplexná logika
Život je zložitý a programy bývajú ešte zložitejšie. Naučíš sa riešiť situácie s viacerými možnosťami a spájať podmienky do logických celkov.
Vetvenie podmienok
V minulej lekcii sme tvorili zložitejšie podmienky pomocou tvorenia podmienok v blokoch inej podmienky. Tento spôsob je zbytočne pracný. Nižšie je príklad takéhoto programu, ktorý neskôr zlepšíme pomocou využitia elif.
if dlzka_videa < 10:
print("Video musí mať aspoň 10 sekúnd.")
else:
if dlzka_videa > 300:
print("Video nesmie byť dlhšie ako 300 sekúnd.")
else:
print("Video môže byť nahrané.")
V tomto príklade na základe hypotetickej dĺžky videa sa používateľovi vypíšu rôzne správy. Ako si ale môžeš všimnúť, takáto jednoduchšia podmienka zbytočne zaberá 7 riadkov kódu. Celý blok prvého else, vieme zapísať jednoduchšie pomocou elif. elif je príkaz, ktorý sa spustí, ak podmienka nad ním nie je splnená (resp. nie je pravdivá). Taktiež jeho názov skratkou pre "else if". Vidíš takéto niečo v našom kóde? (Je to na riadku 3 a 4.)
if dlzka_videa < 10:
print("Video musí mať aspoň 10 sekúnd.")
elif dlzka_videa > 300:
print("Video nesmie byť dlhšie ako 300 sekúnd.")
else:
print("Video môže byť nahrané.")
# Kontrolujeme, či dlzka_videa je menej ako 10.
if dlzka_videa < 10:
print("Video musí mať aspoň 10 sekúnd.")
# Ak dlzka_videa je viac ako 10 (teda neplatí podmienka vyššie),
# tak skontrolujeme, či dlzka_videa je viac ako 300,
# ak áno, vykoná sa kód v tomto bloku.
elif dlzka_videa > 300:
print("Video nesmie byť dlhšie ako 300 sekúnd.")
# Ak dlzka_videa nie je viac ako 300 (a tým pádom ani menej ako 10), tak
# sa spustí else blok.
else:
print("Video môže byť nahrané.")
Logické operátory
Čo ak chceme skontrolovať viac podmienok naraz? Na to slúžia logické operátory, vďaka ktorým vieme spájať a kombinovať naše podmienky. V Pythone poznáme tri: and, or a not.
| Operátor | Význam | Príklad |
|---|---|---|
| and | Obe podmienky musia byť pravdivé. | if vek >= 18 and vek <= 65: |
| or | Aspoň jedna podmienka musí byť pravdivá. | if den == "sobota" or den == "nedeľa": |
| not | Neguje ("otočí") logickú hodnotu. | if not je_prihlaseny: |
Operátor and
Operátor and zabezpečí, že sa kód vykoná iba vtedy, ak sú splnené obe podmienky zároveň. Napríklad, ak chceme skontrolovať, či je používateľ plnoletý a zároveň nie starší ako 65 rokov (teda v produktívnom veku):
vek = int(input("Zadaj vek: "))
if vek >= 18 and vek <= 65:
print("Si v produktívnom veku.")
else:
print("Nie si v produktívnom veku.")
Operátor or
Operátor or sa spustí vtedy, ak aspoň jedna z podmienok je pravdivá. Napríklad, ak chceme skontrolovať, či je dnes víkend:
den = input("Zadaj deň v týždni: ")
if den == "sobota" or den == "nedeľa":
print("Je víkend! Hurá!")
else:
print("Je pracovný deň.")
Operátor not
Operátor not neguje logickú hodnotu. Teda ak je niečo True, tak not z toho spraví False a naopak. Hodí sa vtedy, keď je prirodzenejšie vyjadriť podmienku negáciou.
je_prihlaseny = False
if not je_prihlaseny:
print("Prosím, prihláste sa.")
else:
print("Vitajte!")
Toto je rovnaké, ako keby sme napísali if je_prihlaseny == False, ale not je prehľadnejšie a kratšie.
Kombinovanie logických operátorov
Logické operátory môžeš kombinovať dohromady a tvoriť tak komplexné podmienky. Ak kombinuješ viac operátorov naraz, odporúčam používať zátvorky, aby bolo zreteľné, ktoré podmienky patria k sebe.
vek = int(input("Zadaj vek: "))
je_student = input("Si študent? (ano/nie): ")
if (vek >= 15 and vek <= 26) and je_student == "ano":
print("Máš nárok na študentskú zľavu!")
else:
print("Na študentskú zľavu nemáš nárok.")
Reťazové porovnanie
Python ti dovoľuje zapísať podmienky s rozsahom čísel prehľadnejšie, ako si zvyknutý z matematiky - pomocou reťazového porovnania. Namiesto dvoch podmienok spojených s and vieš zapísať obe naraz:
# Klasický spôsob (s and)
if vek >= 18 and vek <= 65:
print("Si v produktívnom veku.")
# Reťazové porovnanie - rovnaký výsledok, kratší zápis
if 18 <= vek <= 65:
print("Si v produktívnom veku.")
Oba zápisy sú správne a fungujú rovnako. Reťazové porovnanie je viac čitateľné a bližšie k matematickému zápisu. Môžeš používať ktorýkoľvek štýl, záleží len na tebe.
Zopakuj si!
- Pomocou elif vieš pridať ďalšie vetvy rozhodovania bez zbytočného vnárania podmienok.
- Logické spojky and, or a not ti umožňujú spájať viaceré podmienky do jednej.
- Reťazové porovnanie (napr. 18 <= vek <= 65) je skratka za dve podmienky spojené s and.
Na základe počtu bodov vypíš "Známka: X", kde namiesto X vypíš jednu z týchto známok:
- 0 - 35: 5
- 36 - 54: 4
- 55 - 69: 3
- 70 - 89: 2
- 90 - 100: 1
Napríklad, ak počet bodov bude 72, do konzoly bude vypísaný text "Známka: 2".
x = 10
if x > 5:
print("A")
elif x > 8:
print("B")
x = 5
if x > 3 and x < 10:
print("OK")
else:
print("Not ok")
x = 12
if x < 10:
print("A")
elif x < 20:
print("B")
else:
print("C")