Jednoduchá podmienka je užitočná, ale v praxi často potrebuješ kombinovať viac podmienok. Napríklad: "Vstup je povolený, ak má návštevník lístok A zároveň je starší ako 12 rokov." Na to slúžia logické operátory.
Tri logické operátory
Python má tri logické operátory:
| Operátor | Popis | Príklad |
|---|---|---|
and | Pravda, ak SÚ OBA výrazy pravdivé | x > 0 and x < 10 |
or | Pravda, ak ASPOŇ JEDEN výraz je pravdivý | farba == "červená" or farba == "modrá" |
not | Obracia pravdivostnú hodnotu | not je_prázdny |
Operátor and
and vráti True iba keď oba operandy sú True:
vek = 16
ma_sucoivanie = True
if vek >= 15 and ma_sucoivanie:
print("Môžeš sa zúčastniť súťaže.")
else:
print("Nesplňuješ podmienky.")
Pravdivostná tabuľka pre and:
| A | B | A and B |
|---|---|---|
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
Operátor or
or vráti True keď aspoň jeden operand je True:
pocasie = "dážď"
if pocasie == "dážď" or pocasie == "sneh":
print("Vezmi si dáždnik alebo teplé oblečenie.")
Pravdivostná tabuľka pre or:
| A | B | A or B |
|---|---|---|
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
or vráti False iba keď SÚ OBA operandy False. Ak si to ťažko pamätáš, mysli na to takto: or hľadá aspoň jednu pravdu — ak ju nájde, výsledok je pravdivý.
Operátor not
not jednoducho obráti hodnotu:
je_vikend = False
if not je_vikend:
print("Dnes je pracovný deň.")
print(not True) # False
print(not False) # True
print(not 0) # True
print(not 5) # False
Kombinovanie operátorov
Môžeš kombinovať viacero logických operátorov. Poradie vyhodnotenia: najprv not, potom and, nakoniec or.
vek = 17
ma_preukaz = True
je_unaveny = False
moze_riadit = vek >= 17 and ma_preukaz and not je_unaveny
print(moze_riadit) # True
Pri zložitých podmienkach použi zátvorky pre prehľadnosť, aj keď nie sú povinné. (a and b) or c je jasnejšie ako a and b or c.
Skrátené vyhodnotenie
Python vyhodnocuje logické výrazy skrátene:
- Pri
and: ak je prvý operandFalse, druhý sa vôbec nevyhodnotí (celý výraz je aj takFalse). - Pri
or: ak je prvý operandTrue, druhý sa vôbec nevyhodnotí (celý výraz je aj takTrue).
def skontroluj():
print("Volám sa!")
return True
# Táto funkcia sa nikdy nezavolá, lebo False and ... je vždy False
False and skontroluj()
# Táto funkcia sa nikdy nezavolá, lebo True or ... je vždy True
True or skontroluj()
Praktický príklad
heslo = input("Zadaj heslo: ")
meno = input("Zadaj meno: ")
if (meno == "admin" or meno == "root") and heslo == "1234":
print("Prihlásenie úspešné.")
else:
print("Nesprávne meno alebo heslo.")
Nezabudni, že or kombinuje booleovské hodnoty, nie hodnoty samotné. Časté chyby: if farba == "červená" or "modrá": — toto NEFUNGUJE správne, pretože "modrá" je vždy True. Správne: if farba == "červená" or farba == "modrá":.
Cvičné príklady
Aký je výsledok výrazu: True and False or not False?
Zobraziť odpoveď
Napíš podmienku, ktorá je True iba vtedy, keď je číslo x v rozsahu od 1 do 100 vrátane (teda x >= 1 a zároveň x <= 100).