IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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ť ! =
Znovu môžete vyskúšať zopár príkladov:
>>> 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 #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á:

cislo = int(input("Zadaj nejaké číslo"))
if (cislo > 5):
    print("Zadal si číslo väčšie ako 5!")
print("Ďakujem za zadania")
input()

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ť.

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()

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:

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()

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á:

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()

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.

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()

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
Uveďme si príklad:
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()

S tým si zatiaľ vystačíme, operátorov sa pomocou zátvoriek samozrejme dajú kombinovať.

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()

V Pythone môžeme podmienky i skladať, vďaka tomu môžeme podmienky písať aj takto:

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()

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:

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...")

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í.


 

Predchádzajúci článok
Riešené úlohy k 1. a 2. lekcii Pythone
Všetky články v sekcii
Základné konštrukcie jazyka Python
Preskočiť článok
(neodporúčame)
Kvíz - Konzoly a premenné v Pythone
Článok pre vás napísal gcx11
Avatar
Užívateľské hodnotenie:
34 hlasov
(^_^)
Aktivity