Každé rozhodnutie v programe sa nakoniec zredukuje na jednoduchú otázku: áno alebo nie, pravda alebo nepravda? Booleovský výraz je výraz, ktorý dáva práve takúto odpoveď.
Booleovský typ
Python má špeciálny typ bool, ktorý má len dve hodnoty:
je_student = True
ma_auto = False
print(type(True)) # <class 'bool'>
Booleovský typ je pomenovaný po matematikovi Georgeovi Booleovi (1815–1864), ktorý vyvinul algebru logiky — matematický systém pre prácu s hodnotami pravda/nepravda.
Porovnávacie výrazy
Porovnávanie dvoch hodnôt vždy vráti booleovskú hodnotu:
print(5 > 3) # True
print(10 == 10) # True
print(7 != 7) # False
print(3 >= 5) # False
print("ahoj" == "ahoj") # True
print("abc" < "abd") # True (lexikografické porovnanie)
Pravdivosť a nepravdivosť hodnôt
V Pythone je každá hodnota buď "pravdivá" (truthy) alebo "nepravdivá" (falsy). Tieto hodnoty sú vždy nepravdivé:
print(bool(0)) # False
print(bool(0.0)) # False
print(bool("")) # False — prázdny reťazec
print(bool([])) # False — prázdny zoznam
print(bool(None)) # False
Všetky ostatné hodnoty sú pravdivé:
print(bool(1)) # True
print(bool(-5)) # True — akékoľvek nenulové číslo
print(bool("a")) # True — neprázdny reťazec
print(bool([0])) # True — neprázdny zoznam
Toto sa hodí pri kontrole, či je zoznam prázdny: if zoznam: je rovnaké ako if len(zoznam) > 0:, ale kratšie.
Booleovské výrazy ako podmienky
Kdekoľvek Python čaká podmienku, môžeš použiť ľubovoľný výraz — Python sám rozhodne o jeho pravdivosti:
meno = input("Zadaj meno: ")
if meno: # True ak meno nie je prázdny reťazec
print(f"Ahoj, {meno}!")
else:
print("Nezadal si meno.")
Porovnávanie reťazcov
Reťazce sa porovnávajú znakovo podľa abecedy (lexikograficky):
print("adam" < "bob") # True — 'a' je pred 'b'
print("Z" < "a") # True — veľké písmená sú pred malými v ASCII
print("abc" == "abc") # True
print("Python" != "python") # True — záleží na veľkosti písmen
Porovnávanie reťazcov je citlivé na veľkosť písmen. "Ahoj" != "ahoj" je True. Ak chceš porovnávať bez ohľadu na veľkosť, konvertuj oba reťazce na malé písmená: "Ahoj".lower() == "ahoj".lower().
Premenné ako booleovské výrazy
Výsledok porovnania môžeš uložiť do premennej:
vek = 16
je_plnolety = vek >= 18 # False
mozem_riadit = vek >= 17 # False (v SR je min. 17 s inštruktorom)
print(je_plnolety) # False
print(mozem_riadit) # False
Identita verzus rovnosť
== porovnáva hodnoty, is porovnáva identitu (či ide o ten istý objekt v pamäti):
x = [1, 2, 3]
y = [1, 2, 3]
z = x
print(x == y) # True — rovnaký obsah
print(x is y) # False — rôzne objekty v pamäti
print(x is z) # True — z ukazuje na ten istý objekt ako x
Cvičné príklady
Aká je hodnota výrazu bool(0) a bool('') a prečo?
Zobraziť odpoveď
Čo vypíše tento kód? zoznam = []; if zoznam: print('nie je prázdny'); else: print('je prázdny')