Lekce 3 - Booleovské hodnoty, logické operátory a větvení v Pythonu
V předešlém cvičení, Řešené úlohy k 1. a 2. lekci Pythonu, jsme si procvičili nabyté zkušenosti z předchozích lekcí.
V minulé lekci, Řešené úlohy k 1. a 2. lekci Pythonu, jsme si ukázali základní datové typy, práci
se vstupem a výstupem v konzoli. Dnes se v Python tutoriálu podíváme na
další datový typ - booleovské hodnoty, dále na větvení pomocí
if
, elif
a else
, porovnávací a logické
operátory.
Booleovské hodnoty
Booleovské hodnoty jsou pouze dvě - True
a False
(Pravda a Nepravda). Celé si to lze představit jako žárovku. Buď žárovka
svítí, nebo nesvítí. Jiná možnost není Pomocí těchto dvou hodnot se
obvykle řídí tok programu. Pokud je tento výraz pravda udělej toto, jinak
udělej něco jiného. V Pythonu se jako pravdivý výraz vyhodnotí nenulové
číslo, neprázdný řetězec (nebo jiný neprázdný datový typ). Booleovskou
hodnotu daného typu zjistíme funkcí
bool()
.
Nyní si zkusíme pár příkladů. Do pythonovské konzole zkuste například zadat:
>>> bool(1) True >>> bool(3.14) True >>> bool("Ahoj!") True >>> bool(0) False >>> bool("") False
Porovnávací operátory
Porovnávací operátory můžete vidět v tabulce dole:
Operátor | C-like zápis |
---|---|
Rovnost | == |
Je ostře větší | > |
Je ostře menší | < |
Je větší nebo rovno | >= |
Je menší nebo rovno | <= |
Nerovnost | != |
Znovu můžete vyzkoušet pár příkladů:
>>> 1 == 1 True >>> 3 > 2 True >>> 3 < 2 False >>> 5 >= 4 True >>> 5 <= 4 False >>> 6 >= 6 True >>> 1 != 2 True
V Pythonu se negace booleovské hodnoty provádí operátorem
not
. Python má také porovnávací operátory is
,
is not
, in
a not in
.
is
Operátor is
můžete použít na porovnávání dvou čísel,
objektu představující celé číslo a čísla, ale neporovnávejte tímto
operátorem dva objekty. Python totiž porovná jestli obě proměnné odkazují
na stejný objekt a ačkoliv mohou mít proměnné stejnou hodnotu, tak nemusí
odkazovat na stejný objekt. Jen pro zájemce - ID objektu (jeho identifikační
číslo) se dá zjistit pomocí funkce id()
. Operátor
is not
vrací opačnou hodnotu, než operátor is
.
in
Operátor in
zjišťuje, zda-li je řetězec obsažený v jiném
řetězci (lze použít i jinými datovými typy - ukážeme si později).
Operátor not in
dělá pravý opak.
Příklady
>>> "a" in "abeceda" True >>> "b" in "python" False >>> "a" not in "python" True >>> "b" not in "abeceda" False
Syntaxe
V Pythonu je důležité konzistentní odsazování - oficiální směrnice doporučují velikost zhruba čtyř mezer. Za výrazy určující tok programu se v Pythonu píše dvojtečka. Blok příkazů je určen odsazením.
Podmínky
V Pythonu se podmínky píší podobně, jako v CLike jazycích, jediný
rozdíl je ve výrazu elif
(např. C# má
else if
). Pro začátečníky samozřejmě vysvětlím.
Pokročilejší se asi budou chvilku nudit
Podmínky zapisujeme pomocí klíčového slova if
, za kterým
následuje logický výraz. Pokud je výraz pravdivý, provede se následující
příkaz. Pokud ne, následující příkaz se přeskočí a pokračuje se až
pod ním. Vyzkoušejme si to:
#!/usr/bin/env python3
if 15 > 5:
print("Pravda")
print("Program zde pokračuje dál")
input()
Výstup programu:
Konzolová aplikace
Pravda
Program zde pokračuje dál
V Pythonu můžete (ale nemusíte) ve výrazu použít závorky.
Od teď již nebudu psát první řádek!
Pokud podmínka platí (což zde ano), provede se příkaz vypisující do
konzole text "Pravda"
. V obou případech program pokračuje
dál. Součástí výrazu samozřejmě může být i proměnná:
{PYTHON}
cislo = int(input("Zadej nějaké číslo"))
if (cislo > 5):
print("Zadal jsi číslo větší než 5!")
print("Děkuji za zadání")
input()
{/PYTHON}
Rovnost zapisujeme dvěma ==
proto, aby se to nepletlo s
běžným přiřazením do proměnné, které se dělá jen jedním
=
. Pokud chceme nějaký výraz znegovat, napíšeme ho do závorky
a před něj operátor not
. Když budeme chtít vykonat více než
jen jeden příkaz, musíme blok příkazů odsadit.
{PYTHON}
cislo = int(input("Zadej nějaké číslo, ze kterého spočítám odmocninu: "))
if (cislo > 0):
print("Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!")
odmocnina = cislo ** (1/2)
print("Odmocnina z čísla", cislo, "je", odmocnina)
print("Děkuji za zadání")
input()
{/PYTHON}
Takto program vypadá:
Konzolová aplikace
Zadej nějaké číslo, ze kterého spočítám odmocninu:
144
Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!
Odmocnina z čísla 144 je 12.0
Děkuji za zadání
Program načte od uživatele číslo a pokud je větší než 0
,
vypočítá z něj druhou odmocninu. Odmocninu z čísla vypočítáme tak, že
číslo umocníme na zlomek dané odmocniny (v tomto případě 2
)
Bylo by hezké, kdyby nám
program vyhuboval v případě, že zadáme záporné číslo. S dosavadními
znalostmi bychom napsali něco jako:
{PYTHON}
cislo = int(input("Zadej nějaké číslo, ze kterého spočítám odmocninu: "))
if (cislo > 0):
print("Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!")
odmocnina = cislo ** (1/2)
print("Odmocnina z čísla", cislo, "je", odmocnina)
if (cislo <= 0):
print("Odmocnina ze záporného čísla neexistuje!")
print("Děkuji za zadání")
input()
{/PYTHON}
Všimněte si, že musíme pokrýt i případ, kdy se a == 0
,
nejen když je menší. Kód však můžeme výrazně zjednodušit pomocí
klíčového slova else
, které vykoná následující příkaz
nebo blok příkazů v případě, že se podmínka
neprovede:
{PYTHON}
cislo = int(input("Zadej nějaké číslo, ze kterého spočítám odmocninu: "))
if (cislo > 0):
print("Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!")
odmocnina = cislo ** (1/2)
print("Odmocnina z čísla", cislo, "je", odmocnina)
else:
print("Odmocnina ze záporného čísla neexistuje!")
print("Děkuji za zadání")
input()
{/PYTHON}
Kód je mnohem přehlednější a nemusíme vymýšlet opačnou podmínku, což by v případě složené podmínky mohlo být někdy i velmi obtížné.
Klíčové slovo else
se také využívá v případě, kdy
potřebujeme v příkazu manipulovat s proměnnou z podmínky a nemůžeme se na
ni tedy ptát potom znovu. Program si sám pamatuje, že se podmínka nesplnila
a přejde do sekce else
. Ukažme si to na příkladu: Mějme
číslo, kde bude hodnota 0
nebo 1
a po nás se bude
chtít, abychom hodnotu prohodili (pokud tam je 0
, dáme tam
1
, pokud 1
, dáme tam 0
). Naivně bychom
mohli kód napsat takto:
cislo = 0 # do čísla si přiřadíme na začátku 0 if (cislo == 0): # pokud je číslo 0, dáme do něj jedničku cislo = 1 if (cislo == 1): # pokud je číslo 1, dáme do něj nulu cislo = 0 print(cislo) input()
Nefunguje to, že? Pojďme si projet, co bude program dělat. Na začátku
máme v čísle nulu, první podmínka se jistě splní a dosadí do čísla
jedničku. No ale rázem se splní i ta druhá. Co s tím? Když podmínky
otočíme, budeme mít ten samý problém s jedničkou. Jak z toho ven? Ano,
použijeme else
.
{PYTHON}
cislo = 0 # do čísla si přiřadíme na začátku 0
if (cislo == 0): # pokud je číslo 0, dáme do něj jedničku
cislo = 1
else: # pokud je číslo 1, dáme do něj nulu
cislo = 0
print(cislo)
input()
{/PYTHON}
Podmínky je možné skládat a to pomocí dvou základních operátorů:
Logické operátory
Operátor | Zápis |
---|---|
A zároveň | and |
Nebo | or |
Negace | not |
Uveďme si příklad:
{PYTHON}
cislo = int(input("Zadejte číslo v rozmezí 10-20: "))
if ((cislo >= 10) and (cislo <= 20)):
print("Zadal jsi správně")
else:
print("Zadal jsi špatně")
input()
{/PYTHON}
S tím si zatím vystačíme, operátory se pomocí závorek samozřejmě dají kombinovat.
{PYTHON}
cislo = int(input("Zadejte číslo v rozmezí 10-20 nebo 30-40:"))
if (((cislo >= 10) and (cislo <= 20)) or ((cislo >=30) and (cislo <= 40))):
print("Zadal jsi správně")
else:
print("Zadal jsi špatně")
input()
{/PYTHON}
V Pythonu můžeme podmínky i skládat, díky tomu můžeme podmínky psát i takto:
{PYTHON}
cislo = int(input("Zadejte číslo v rozmezí 10-20 nebo 30-40:"))
if ((10 <= cislo <= 20) or (30 <= cislo <= 40)):
print("Zadal jsi správně")
else:
print("Zadal jsi špatně")
input()
{/PYTHON}
Kalkulačka
Vzpomeňme si na naši kalkulačku z předchozí lekce, která načetla 2
čísla a vypočítala všechny 4 operace. Nyní si ale budeme chtít zvolit,
kterou operaci chceme. Použijeme tedy konstrukci elif
- ta provede
operaci, pokud také platí podmínka:
{PYTHON}
print("Kalkulačka\n")
prvni_cislo = int(input("Zadejte první číslo: "))
druhe_cislo = int(input("Zadejte druhé číslo: "))
print("1 - sčítání")
print("2 - odčítání")
print("3 - násobení")
print("4 - dělení")
cislo_operace = int(input("Zadejte číslo operace: "))
if cislo_operace == 1:
print("Jejich součet je:", prvni_cislo + druhe_cislo)
elif cislo_operace == 2:
print("Jejich rozdíl je:", prvni_cislo - druhe_cislo)
elif cislo_operace == 3:
print("Jejich součin je:", prvni_cislo * druhe_cislo)
elif cislo_operace == 4:
print("Jejich podíl je:", prvni_cislo / druhe_cislo)
else:
print("Neplatná volba!")
input("\nStiskněte libovolnou klávesu...")
{/PYTHON}
Takto program vypadá:
Konzolová aplikace
Kalkulačka
Zadejte první číslo:
3
Zadejte druhé číslo:
2
1 - sčítání
2 - odčítání
3 - násobení
4 - dělení
Zadejte číslo operace:
4
Jejich podíl je: 1.5
Stiskněte libovolnou klávesu...
V příští lekci, Řešené úlohy ke 3. lekci Pythonu, nás čekají cykly - konstrukce
while
, for in
a příkazy continue
a
break
. Dále se naučíme funkci range()
.
V následujícím cvičení, Řešené úlohy ke 3. lekci Pythonu, si procvičíme nabyté zkušenosti z předchozích lekcí.
Komentáře


Zobrazeno 10 zpráv z 61. Zobrazit vše