V rámci logickej podmienky (ktorú píšeme napríklad vo vetvení - keď používame príkaz IF) môžeme používať logické operácie and, or a not, a tak vytvoriť komplexnejšiu podmienku. Tieto spojky fungujú presne tak, ako ste sa učili na matematike v rámci tém matematická togika a výroky (tam sa ale zvyčajne značia ako ∧, ∨ a ¬).
Spojka and spája dva výroky. Výrok (A and B) je pravdivý (True) práve vtedy, keď je pravdivý výrok A a zároveň výrok B. V programe tak môžeme overiť, či platia dve podmienky (alebo aj viac podmienok) zároveň. Napríklad: budík chceme spustiť len v pracovné dni o siedmej hodine:
# nech je den cislo 0..6 (0=po, 1=ut, 2=st, ... 6=ne)
day = int(input())
# nech je cas cislo 0..23
cas = int(input())
if (day <= 4) and (cas == 7):
print("budik zvoni!")
Takýto program by sme samozrejme vedeli napísať aj bez použitia and:
# nech je den cislo 0..6 (0=po, 1=ut, 2=st, ... 6=ne)
day = int(input())
# nech je cas cislo 0..23
cas = int(input())
if day <= 4:
if cas == 7:
print("budik zvoni!")
Spojka or spája dva výroky. Výrok (A or B) je pravdivý (True) práve vtedy, keď je pravdivý aspoň jeden z výrokov A, B. V programe tak môžeme overiť, či platí aspoň jedna podmienka. Napríklad: alarm sa má spustiť ak hladina v nádrži klesne pod 1.5 metra alebo prekročí 2.33 metra:
# vyska hladiny v metroch je desatinne cislo
level = float(input())
if level < 1.5 or level > 2.33:
print("alarm!")
# tu by sa mohla este odoslat napriklad varovna SMS
# alebo napriklad vypnut nejaky stroj...
Takýto program by sme samozrejme vedeli napísať aj bez použitia or:
# vyska hladiny v metroch je desatinne cislo
level = float(input())
if level < 1.5:
print("alarm!")
if level > 2.33:
print("alarm!")
Spojka not neguje výrok (robí z neho opačný). Vieme si ňou uľahčiť zápis logickej podmienky, ak sa nám jednoduchšie vyjadruje opačný prípad. Výrok (not A) je pravdivý (True) práve vtedy, keď je výrok A nepravdivý. Napríklad: budík chceme spustiť každý deň okrem piatka a nedele:
# nech je den cislo 0..6 (0=po, 1=ut, 2=st, ... 6=ne)
day = int(input())
if not (day == 4 or day == 6):
print("budik zvoni!")
Takýto program by sme samozrejme vedeli napísať aj bez použitia not:
# nech je den cislo 0..6 (0=po, 1=ut, 2=st, ... 6=ne)
day = int(input())
if (day != 4) and (day != 6):
print("budik zvoni!")
Alebo aj takto...
# nech je den cislo 0..6 (0=po, 1=ut, 2=st, ... 6=ne)
day = int(input())
if (day < 4) or (day == 5):
print("budik zvoni!")
Logické spojky v progamovaní nutne nepotrebujeme - všetky, aj keď komplikovanejšie podmienky vieme formulovať len s pomocou jednoduchého IF výrazu. Spojky nám však značne zjednodušujú programovanie, nakoľko bez nich by vznikal duplicitný kód (or), prípadne takzvaný arrow kód (and). Pri logickej spojke 'not' stojí za povšimnutie, že ňou vieme veľmi jednoducho 'vymeniť' vetvy IF a ELSE. Podmienky formulujte tak, aby boli čo najčitateľnejšie a pokiaľ možno intuitívne vyjadrovali požadované správanie programu. Sami posúďte, ktorá z ukážok pri vysvetlení logickej spojky 'not' vyššie sa vám pozdáva najviac.
Výsledok vyhodnocovania výroku vieme uložiť do premennej podobne ako výsledok vyhodnocovania aritmetických operácii. Výsledok vyhodnocovania výroku je logická hodnota True alebo False.
Pretypovať na boolean môžete takmer čokoľvek, z definície funkcie bool():
The bool() function returns the boolean value of a specified object. The function will always return True, unless:
Príklad namiesto teórie:
# NACITANIE TYPU BOOLEAN
day = int(input()) # 0=po, 1=ut, 2=st, ... 6=ne
month = int(input()) # 1=jan, 2=feb, 3=mar, ... 12=dec
air_temperature = float(input())
# progam mozeme sprehladnit, ak si pomenujeme medzivypocty
# ci vytvorime ine premenne, ktore nam ulahcia tvorbu podmienok
is_winter = month >= 12 and month <=2
is_autumn = month == 9 or month == 10 or month == 11
# premenne obsahujuce logicku honotu mozeme pouzit
# v ramci dalsich logickych vyrokov
is_spring = (not is_winter) and (month < 6)
is_summer = not (is_winter or is_autumn or is_spring)
# premenne mozeme pouzit aj v ramci podmineky priamo v if
if is_summer and air_temperature > 30:
print("Go to a swimming pool!")
# v podmienke IF moze byt aj jedina premenna:
may_swim = is_summer and air_temperature > 30
if may_swim:
print("Go to a swimming pool!")
# premenne pouzite v ramci porovnavania su automaticky pretypovane na bool
# ak chceme nieco vykonat napriklad ak je cislo prave 0, mozeme napisat:
if not air_temperature:
print("Bod mrazu!")