Lekce 8 - Podmínky (větvení) v Pythonu
V předešlém cvičení, Řešené úlohy k 6.-7. 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 mohli něco naprogramovat, 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. Tomu se říká, že se program větví. K větvení používáme podmínky. Pro vysvětlení si vytvoříme program na výpočet odmocniny.
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,
program následující příkaz přeskočí a pokračuje 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ž v našem příkladu 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 nepletla 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í druhé odmocniny.
Větev else
Bylo by dobré, 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 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
proměnnou 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 (bude-li
hodnota 0
, dosadíme místo ní 1
, bude-li
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)
Kód nefunguje, že? Pojďme si projít, 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 druhá
podmínka. Co s tím? Když podmínky otočíme, budeme mít tentýž 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
podobné situace, 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 1155x (2.27 kB)
Aplikace je včetně zdrojových kódů v jazyce Python