Pri programovaní často riešime situácie, keď sa má program na základe nejakej podmienky rozhodnúť medzi viacerými možnosťami. Na to nám slúži blok príkazov if…else…elif . Napríklad, program má vypísať, či zadané číslo je väčšie ako nula:
cislo = 10
if cislo > 0:
print('číslo je väčšie ako nula.')
číslo je väčšie ako nula.
Odsadenie skupiny príkazov (blok príkazov) má rovnaký význam ako vo for-cykle: budeme ich odsadzovať vždy presne o 4 medzery.
Ak by sme zadali ako číslo -5 nezobrazí sa nič. Podmienka sa vyhodnotí, ale nie je splnená. Program skončí. Vieme ho samozrejme upraviť:
cislo = -5
if cislo > 0:
print('číslo je väčšie ako nula.')
else:
print('číslo je menšie ako nula.')
číslo je menšie ako nula.
Ak budeme potrebovať pridať ďalšiu podmienku, napríklad či sa číslo rovná nule:
cislo = -5
if cislo > 0:
print('číslo je väčšie ako nula.')
elif cislo < 0:
print('číslo je menšie ako nula.')
elif cislo == 0:
print('číslo sa rovná nule.')
Tu si všimnite dôležitú vec pri zápise „rovná sa“. V pythone slúži znak „=“ na priradenie premennej! Preto keď chcem napísať podmienku rovná sa, musíme použiť takýto zápis „==“. Pravidelne sa mi stáva táto chyba a program samozrejme vyhlási chybu 🙂 .
Python podporuje obvyklé logické podmienky z matematiky:
Rovná sa: a == b
Nie je rovné: a != b
Menej ako: a < b
Menšie alebo rovné: a <= b
Väčšie ako: a > b
Väčšie alebo rovné: a >= b
Vnorené podmienky
Predchádzajúci príklad je možné vyriešiť aj bez elif a to vnorenou podmienkou (všimnite si odsadenie jednotlivých blokov kódu.
cislo = -5
if cislo > 0:
print('číslo je väčšie ako nula.')
else:
if cislo < 0:
print('číslo je menšie ako nula.')
else:
if cislo == 0:
print('číslo sa rovná nule.')
Logické operácie
Pozrime sa podrobnejšie na logické operácie and
, or
a not
. Tieto operácie samozrejme fungujú pre logické hodnoty True
a False
.
A | B | A and B |
---|---|---|
False | False | False |
True | False | False |
False | True | False |
True | True | True |
cislo = 5
if cislo > 0 and cislo < 10:
print('číslo je väčšie ako nula a menšie ako 10')
else:
print('číslo nie je väčšie ako nula a menšie ako 10')
A | B | A or B |
---|---|---|
False | False | False |
True | False | True |
False | True | True |
True | True | True |
cislo = 5
if cislo == 0 or cislo == 10:
print('číslo sa rovná 0 alebo 10')
else:
print('číslo sa nerovná 0 alebo 10')
A | not A |
---|---|
False | True |
True | False |
cislo = 10
if cislo > 0:
print('A')
else:
print('B')
# výsledok je A
cislo = 10
if not cislo > 0:
print('A')
else:
print('B')
# výsledok je B
Logické operácie fungujú nielen pre logický typ, ale aj pre skoro všetky ďalšie typy. V tomto prípade Python pre každý typ definuje prípady, ktoré on (Python) chápe ako False
a zrejme všetky ostatné hodnoty tohto typu chápe ako True
. Ukážme prípady pre doteraz známe typy, ktoré označujú logickú hodnotu False
:
typ | False | True |
---|---|---|
int | x == 0 | x != 0 |
float | x == 0.0 | x != 0.0 |
str | x == '' | x != '' |
Tejto tabuľke budeme rozumieť takto: keď bude Python niekde očakávať logickú hodnotu (napríklad v príkaze if
) a bude tam namiesto toho celé číslo, tak, ak má hodnotu 0, pochopí to ako False
a ak má hodnotu rôznu od 0, bude to pre neho znamenať True
. Podobne aj s reťazcami: ak ako podmienku if
uvedieme znakový reťazec, tento bude reprezentovať False
, ak je prázdny a True
, ak je neprázdny.
Skrátený zápis podmienok v pythone
Bežným zvykom programátorov je uľahčovať a skracovať zápis kódu. V pythone sa budeme často stretávať so skráteným zápisom. Tento zápis síce skráti kód, ale zároveň je daný kód menej čitateľný pre začiatočníkov…
a = 2
b = 330
print("A") if a > b else print("B")
B
a = 330
b = 330
print("A") if a > b else print("rovná sa") if a == b else print("B")
rovná sa