Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

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 976x (2.27 kB)
Aplikace je včetně zdrojových kódů v jazyce Python

 

Předchozí článek
Řešené úlohy k 5.-6. lekci Pythonu
Všechny články v sekci
Základní konstrukce jazyka Python
Přeskočit článek
(nedoporučujeme)
Podmínky (větvení) podruhé: Konstrukce match v Pythonu
Článek pro vás napsal gcx11
Avatar
Uživatelské hodnocení:
1026 hlasů
(^_^)
Aktivity