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 vnorených podmienok. 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é.")
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.
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 pomocou 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 chceš, je to na tebe.
Kombinovanie logických operátorov
Logické operátory môžeš kombinovať dohromady a tvoriť tak komplexné podmienky. Ak kombinuješ viac operátorov naraz, odporúčame používať zátvorky, aby bolo zreteľné, ktoré podmienky patria k sebe.
V tomto kóde používateľ musí zadať dva údaje, jeho vek a či je študentom. Kontrolujeme, či jeho vek je v rozsahu 15 až 26 a či zadal, že je študentom. Následne podľa týchto údajov vypíšeme, či má nárok na študentskú zľavu alebo nie.
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.")
Zopakuj si!
- Pomocou
elifvieš pridať ďalšie vetvy rozhodovania bez zbytočných vnorených podmienok. - Logické spojky
and,oranotti umožňujú spájať viaceré podmienky do jednej. - Reťazové porovnanie (napr.
18 <= vek <= 65) je skratka za dve podmienky spojené sand.
elif a logickými operátormi.
Vytvor premennú body, ktorá bude načítaná zo vstupu od používateľa. Vstup bude vždy číslo od 0 do 100, pretypuj ho na int.Na základe počtu bodov vypíš "Známka: X", kde namiesto X vypíš jednu z týchto známok podľa počtu bodov:
0 až 35: 5
36 až 54: 4
55 až 69: 3
70 až 89: 2
90 až 100: 1
Napríklad, ak počet bodov bude 72, do konzoly bude vypísaný text "Známka: 2".
elif v Pythone?
if a else
elif môže mať jeden if blok?
elif vetiev v jednom rozhodovacom bloku. Môžeš ich použiť toľko, koľko potrebuješ.
or
and
not
x = 10
if x > 5:
print("A")
elif x > 8:
print("B")
x > 5 je splnená. Keď sa splní if, ostatné vetvy (elif alebo else) sa už nekontrolujú. Preto sa elif x > 8 vôbec nevyhodnotí, aj keď by bola tiež pravdivá.
if?
x > 5
x == 10
x + 5
x < 3 and x > 1
cislo > 3 and < 5
x > 5, x == 10 a x < 3 and x > 1, pretože ide o logické výrazy, ktoré majú hodnotu True alebo False. Podmienka if potrebuje práve takýto výsledok. Výraz x + 5 nie je logická podmienka, je to len matematický výpočet, ktorý nevracia priamo logickú hodnotu. cislo > 3 and < 5 by vyhodil chybu, keďže používa nesprávny syntax (zápis).
or?
10 < x < 20
10 < x and < 20
x > 10 > 20
x < (10 < 20)
x = 5
if x > 3 and x < 10:
print("OK")
else:
print("Not ok")
1 < x < 10
x > 1 and x < 10
x < 1 and x > 10
1 < x < 10, x > 1 and x < 10, pretože obidva vyjadrujú, že x je väčšie ako 1 a menšie ako 10. Python umožňuje aj reťazové porovnanie 1 < x < 10. Výraz x < 1 and x > 10 je nesprávny, pretože číslo nemôže byť zároveň menšie ako 1 a väčšie ako 10.
x = 12
if x < 10:
print("A")
elif x < 20:
print("B")
else:
print("C")
x < 10 je nepravdivá. Python preto skontroluje ďalšiu vetvu elif x < 20, ktorá je pravdivá. Vetva else sa vykoná iba vtedy, keď žiadna predchádzajúca podmienka neplatí.