Lekce 7 - Podmínky (větvení) v Pythonu
V předešlém cvičení, Řešené úlohy k 5.-6. lekci Pythonu, jsme si procvičili nabyté zkušenosti z předchozích lekcí.
V tomto Python tutoriálu se budeme věnovat podmínkám. Abychom si něco naprogramovali, potřebujeme nějak reagovat na různé situace. Může to být například hodnota zadaná uživatelem, podle které budeme chtít měnit další běh programu. Říkáme, že se program větví a k větvení používáme podmínky. Vytvoříme program na výpočet odmocniny a vylepšíme naši kalkulačku.
Podmínky - if
Podmínky zapisujeme pomocí klíčového slova if
, za kterým
následuje logický výraz zakončený dvojtečkou (:
). Pokud je
výraz v podmínce 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:
if (15 > 5):
print("Pravda")
print("Program zde pokračuje dál")
Výstup programu:
Jednoduchá podmínka:
Pravda
Program zde pokračuje dál
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á:
a = int(input("Zadej nějaké číslo: "))
if (a > 5):
print("Zadal jsi číslo větší než 5!")
print("Děkuji za zadání")
Relační operátory
Ukažme si nyní relační operátory, které můžeme ve výrazech používat:
Význam | Operátor |
---|---|
Rovnost | == |
Je ostře větší | > |
Je ostře menší | < |
Je větší nebo rovno | >= |
Je menší nebo rovno | <= |
Nerovnost | != |
Obecná negace | not |
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 výraz znegovat, napíšeme před něj klíčové
slovo not
.
Blok příkazů
Když budeme chtít vykonat více než jen jeden příkaz, musíme každý příkaz vložit na samostatný řádek odsazený tabulátorem:
a = int(input("Zadej nějaké číslo, ze kterého spočítám odmocninu: "))
if (a > 0):
print("Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!")
odmocnina = a ** (1 / 2)
print(f"Odmocnina z čísla {a} je {odmocnina}")
print("Děkuji za zadání")
V konzoli pak vidíme výstup:
Výstup podmínky:
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. Použili jsme zde operátor pro mocniny
**
a nastavili zadanou proměnnou umocněnou exponentem
1/2
, což je ekvivalent pro získání jeho odmocniny.
Větev else
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:
a = int(input("Zadej nějaké číslo, ze kterého spočítám odmocninu: "))
if (a >= 0):
print("Zadal jsi nezáporné číslo, to znamená, že ho mohu odmocnit!")
odmocnina = a ** (1 / 2)
print(f"Odmocnina z čísla {a} je {odmocnina} ")
if (a < 0):
print("Odmocnina ze záporného čísla neexistuje v oboru reálných čísel!")
print("Děkuji za zadání")
Kód však můžeme dále 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:
a = int(input("Zadej nějaké číslo, ze kterého spočítám odmocninu: "))
if (a >= 0):
print("Zadal jsi nezáporné číslo, to znamená, že ho mohu odmocnit!")
odmocnina = a ** (1 / 2)
print(f"Odmocnina z čísla {a} je {odmocnina}")
else:
print("Odmocnina ze záporného čísla neexistuje v oboru reálných čísel!")
print("Děkuji za zadání")
Kód je teď 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é. V případě více příkazů musí být každý řádek za
klíčovým slovem else
odsazen tabulátorem.
Klíčové slovo else
se využívá také 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 znovu. Program si sám pamatuje, že se podmínka nesplnila a
přejde do větve else
. Ukažme si to na příkladu.
Prohození hodnot proměnné
Mějme číslo cislo
, které bude mít hodnotu 0
nebo 1
. Po nás se bude chtít, abychom hodnotu prohodili (pokud
tam je 0
, dosadíme tam 1
, pokud 1
,
dosadíme 0
). Naivně bychom mohli kód napsat takto:
cislo = 0 # deklarace proměnné s hodnotou 0
if (cislo == 0): # pokud je hodnota proměnné 0, změníme hodnotu na 1
cislo = 1
if (cislo == 1): # pokud je hodnota proměnné 1, změníme hodnotu na 0
cislo = 0
print(cislo)
Nefunguje to, že? Pojďme si projet, co bude program dělat. Na začátku
máme v cislo
nulu, první podmínka se tedy jistě splní a
dosadí do cislo
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
:
cislo = 0 # deklarace proměnné s hodnotou 0
if (cislo == 0): # pokud je hodnota proměnné 0, změníme hodnotu na 1
cislo = 1
else: # pokud je hodnota proměnné 1, změníme hodnotu na 0
cislo = 0
print(cislo)
Program máte samozřejmě opět v příloze, zkoušejte si vytvářet nějaké podobné, znalosti již k tomu máte
V příští lekci, Podmínky (větvení) podruhé: Konstrukce match v Pythonu, se vrátíme k podmínkám a ukážeme si další
podporovanou syntaxi a konstrukci match
.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 980x (2.27 kB)
Aplikace je včetně zdrojových kódů v jazyce Python