3. diel - Boolovských hodnôt, logické operátory a vetvenia v Pythone
V predchádzajúcom cvičení, Riešené úlohy k 1. a 2. lekcii Pythone, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.
V minulej lekcii, Riešené úlohy k 1. a 2. lekcii Pythone , sme si ukázali základné dátové typy,
prácu so vstupom a výstupom v konzole. Dnes sa v Python tutoriálu pozrieme na
ďalšie dátový typ - boolovských hodnôt, ďalej na vetvenia pomocou
if
, elif
a else
, porovnávací a logické
operátory.
Boolovských hodnôt
Booleovské hodnoty sú iba dve - True
a False
(Pravda a Nepravda). Celé si to možno predstaviť ako žiarovku. Buď
žiarovka svieti, alebo nesvieti. Iná možnosť nie je Pomocou týchto dvoch hodnôt sa
zvyčajne riadi tok programu. Pokiaľ je tento výraz pravda urob toto, inak
urob niečo iné. V Pythone sa ako pravdivý výraz vyhodnotí nenulovej
číslo, neprázdny reťazec (alebo iný neprázdny dátový typ). Boolean
daného typu zistíme funkcií bool()
.
Teraz si skúsime pár príkladov. Do pythonovské konzoly skúste napríklad zadať:
>>> bool(1) True >>> bool(3.14) True >>> bool("Ahoj!") True >>> bool(0) False >>> bool("") False
Operátory porovnávania
Porovnávacie operátory môžete vidieť v tabuľke dole:
operátor | C-like zápis |
---|---|
rovnosť | == |
Je ostro väčšia | > |
Je ostro menšia | < |
Je väčšie alebo rovné | > = |
Je menšie alebo rovné | <= |
nerovnosť | ! = |
>>> 1 == 1 True >>> 3 > 2 True >>> 3 < 2 False >>> 5 >= 4 True >>> 5 <= 4 False >>> 6 >= 6 True >>> 1 != 2 True
V Pythone sa negácie boolovských hodnôt vykonáva operátorom
not
. Python má tiež operátory porovnávania is
,
is not
, in
a not in
.
is
Operátor is
môžete použiť na porovnávanie dvoch čísiel,
objektu predstavujúce celé číslo a čísla, ale neporovnávajte týmto
operátorom dva objekty. Python totiž porovná či obe premenné odkazujú na
rovnaký objekt a hoci môžu mať premenné rovnakú hodnotu, tak nemusí
odkazovať na rovnaký objekt. Len pre záujemcov - ID objektu (jeho
identifikačné číslo) sa dá zistiť pomocou funkcie id()
.
Operátor is not
vracia opačnú hodnotu, než operátor
is
.
in
Operátor in
zisťuje, či je reťazec obsiahnutý v inom
reťazci (možno použiť aj inými dátovými typy - ukážeme si neskôr).
Operátor not in
robí pravý opak.
Príklady
>>> "a" in "abeceda" True >>> "b" in "python" False >>> "a" not in "python" True >>> "b" not in "abeceda" False
Syntaxe
V Pythone je dôležité konzistentné odsadzovanie - oficiálne smernice odporúčajú veľkosť zhruba štyroch medzier. Za výrazy určujúce tok programu sa v Pythone píše dvojbodka. Blok príkazov je určený odsadením.
Podmienky
V Pythone sa podmienky píšu podobne, ako v Clik jazykoch, jediný rozdiel
je vo výraze elif
(napr. C # má
else if
). Pre začiatočníkov samozrejme vysvetlím.
Pokročilejšie sa asi budú chvíľku nudiť
Podmienky zapisujeme pomocou kľúčového slova if
, za ktorým
nasleduje logický výraz. Ak je výraz pravdivý, vykoná sa nasledujúci
príkaz. Ak nie, nasledujúci príkaz sa preskočí a pokračuje sa až pod
ním. Vyskúšajme si to:
#!/usr/bin/env python3
if 15 > 5:
print("Pravda")
print("Program tu pokračuje ďalej")
input()
Výstup programu:
Konzolová aplikácia
Pravda
Program tu pokračuje ďalej
V Pythone môžete (ale nemusíte) vo výraze použiť zátvorky.
Od teraz už nebudem písať prvý riadok!
Ak podmienka platí (čo tu áno), vykoná sa príkaz Vyhlasujúca do konzoly
text " Pravda "
. V oboch prípadoch program pokračuje
ďalej. Súčasťou výrazu samozrejme môže byť aj premenná:
{PYTHON}
cislo = int(input("Zadaj nejaké číslo"))
if (cislo > 5):
print("Zadal si číslo väčšie ako 5!")
print("Ďakujem za zadania")
input()
{/PYTHON}
Rovnosť zapisujeme dvoma ==
preto, aby sa to neplietlo s
bežným priradením do premennej, ktoré sa robí len jedným =
.
Ak chceme nejaký výraz znegovat, napíšeme ho do zátvorky a pred neho
operátor not
. Keď budeme chcieť vykonať viac než len jeden
príkaz, musíme blok príkazov odsadiť.
{PYTHON}
cislo = int(input("Zadaj nejaké číslo, z ktorého spočítám odmocninu: "))
if (cislo > 0):
print("Zadal si číslo väčšie ako 0, to znamená, že ho môžem odmocniť!")
odmocnina = cislo ** (1/2)
print("Odmocnina z čísla", cislo, "je", odmocnina)
print("Ďakujem za zadania")
input()
{/PYTHON}
Takto program vyzerá:
Konzolová aplikácia
Zadaj nejaké číslo, z ktorého spočítám odmocninu:
144
Zadal si číslo väčšie ako 0, to znamená, že ho môžem odmocniť!
Odmocnina z čísla 144 je 12.0
Ďakujem za zadania
Program načíta od užívateľa číslo a ak je väčšia ako
0
, vypočíta z neho druhú odmocninu. Odmocninu z čísla
vypočítame tak, že číslo umocníme na zlomok danej odmocniny (v tomto
prípade 2
) Bolo
by pekné, keby nám program vyhubovala v prípade, že zadáme záporné
číslo. S doterajšími znalosťami by sme napísali niečo ako:
{PYTHON}
cislo = int(input("Zadaj nejaké číslo, z ktorého spočítám odmocninu: "))
if (cislo > 0):
print("Zadal si číslo väčšie ako 0, to znamená, že ho môžem odmocniť!")
odmocnina = cislo ** (1/2)
print("Odmocnina z čísla", cislo, "je", odmocnina)
if (cislo <= 0):
print("Odmocnina zo záporného čísla neexistuje!")
print("Ďakujem za zadania")
input()
{/PYTHON}
Všimnite si, že musíme pokryť aj prípad, kedy sa a == 0
,
nielen keď je menšia. Kód však môžeme výrazne zjednodušiť pomocou
kľúčového slova else
, ktoré vykoná nasledujúci príkaz alebo
blok príkazov v prípade, že sa podmienka nevykoná:
{PYTHON}
cislo = int(input("Zadaj nejaké číslo, z ktorého spočítám odmocninu: "))
if (cislo > 0):
print("Zadal si číslo väčšie ako 0, to znamená, že ho môžem odmocniť!")
odmocnina = cislo ** (1/2)
print("Odmocnina z čísla", cislo, "je", odmocnina)
else:
print("Odmocnina zo záporného čísla neexistuje!")
print("Ďakujem za zadania")
input()
{/PYTHON}
Kód je oveľa prehľadnejšie a nemusíme vymýšľať opačnú podmienku, čo by v prípade zloženej podmienky mohlo byť niekedy aj veľmi ťažké.
Kľúčové slovo else
sa tiež využíva v prípade, keď
potrebujeme v príkaze manipulovať s premennou z podmienky a nemôžeme sa na
ňu teda pýtať potom znova. Program si sám pamätá, že sa podmienka
nesplnila a prejde do sekcie else
. Ukážme si to na príklade:
Majme číslo, kde bude hodnota 0
alebo 1
a po nás sa
bude chcieť, aby sme hodnotu prehodili (ak tam je 0
, dáme tam
1
, ak 1
, dáme tam 0
). Naivne by sme
mohli kód napísať takto:
cislo = 0 # do položky si priradíme na začiatku 0 if (cislo == 0): # ak je číslo 0, dáme do neho jedničku cislo = 1 if (cislo == 1): # ak je číslo 1, dáme doňho nulu cislo = 0 print(cislo) input()
Nefunguje to, že? Poďme si prejsť, čo bude program robiť. Na začiatku
máme v čísle nulu, prvá podmienka sa určite splní a dosadí do položky
jedničku. No ale razom sa splní aj tá druhá. Čo s tým? Keď podmienky
otočíme, budeme mať ten istý problém s jednotkou. Ako z toho von? Áno,
použijeme else
.
{PYTHON}
cislo = 0 # do položky si priradíme na začiatku 0
if (cislo == 0): # ak je číslo 0, dáme do neho jedničku
cislo = 1
else: # ak je číslo 1, dáme doňho nulu
cislo = 0
print(cislo)
input()
{/PYTHON}
Podmienky je možné skladať a to pomocou dvoch základných operátorov:
Logické operátory
operátor | zápis |
---|---|
A zároveň | and |
alebo | or |
negácia | not |
{PYTHON}
cislo = int(input("Zadajte číslo v rozmedzí 10-20: "))
if ((cislo >= 10) and (cislo <= 20)):
print("Zadal si správne")
else:
print("Zadal si zle")
input()
{/PYTHON}
S tým si zatiaľ vystačíme, operátorov sa pomocou zátvoriek samozrejme dajú kombinovať.
{PYTHON}
cislo = int(input("Zadajte číslo v rozmedzí 10-20 alebo 30-40:"))
if (((cislo >= 10) and (cislo <= 20)) or ((cislo >=30) and (cislo <= 40))):
print("Zadal si správne")
else:
print("Zadal si zle")
input()
{/PYTHON}
V Pythone môžeme podmienky i skladať, vďaka tomu môžeme podmienky písať aj takto:
{PYTHON}
cislo = int(input("Zadajte číslo v rozmedzí 10-20 alebo 30-40:"))
if ((10 <= cislo <= 20) or (30 <= cislo <= 40)):
print("Zadal si správne")
else:
print("Zadal si zle")
input()
{/PYTHON}
Kalkulačka
Spomeňme si na našu kalkulačku z predchádzajúcej lekcie, ktorá
načítala 2 čísla a vypočítala všetky 4 operácie. Teraz si ale budeme
chcieť zvoliť, ktorú operáciu chceme. Použijeme teda konštrukciu
elif
- tá vykoná operáciu, ak tiež platí podmienka:
{PYTHON}
print("Kalkulačka\n")
prvni_cislo = int(input("Zadajte prvé číslo: "))
druhe_cislo = int(input("Zadajte druhé číslo: "))
print("1 - sčítanie")
print("2 - odčítanie")
print("3 - násobenie")
print("4 - delenie")
cislo_operace = int(input("Zadajte číslo operácie: "))
if cislo_operace == 1:
print("Ich súčet je:", prvni_cislo + druhe_cislo)
elif cislo_operace == 2:
print("Ich rozdiel je:", prvni_cislo - druhe_cislo)
elif cislo_operace == 3:
print("Ich súčin je:", prvni_cislo * druhe_cislo)
elif cislo_operace == 4:
print("Ich podiel je:", prvni_cislo / druhe_cislo)
else:
print("Neplatná voľba!")
input("\nStlačte ľubovoľný kláves...")
{/PYTHON}
Takto program vyzerá:
Konzolová aplikácia
Kalkulačka
Zadajte prvé číslo:
3
Zadajte druhé číslo:
2
1 - sčítanie
2 - odčítanie
3 - násobenie
4 - delenie
Zadajte číslo operácie:
4
Ich podiel je: 1.5
Stlačte ľubovoľný kláves...
V budúcej lekcii, Kvíz - Konzoly a premenné v Pythone , nás čakajú cykly - konštrukcia
while
, for in
a príkazy continue
a
break
. Ďalej sa naučíme funkciu range()
.
V nasledujúcom kvíze, Kvíz - Konzoly a premenné v Pythone, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.