Podmíněný příkaz
Často se budeme chtít v programu rozhodovat, co vykonat v dalších krocích. Použijme příklad z první kapitolky, kde jsme
zkoumali zápis algoritmu pro ověření sudosti čísla. Chceme, aby program vypsal Číslo je sudé pokud je číslo dělitelné
dvěma beze zbytku. Jinak vypíšeme Číslo je liché.
Podmíněný příkaz zapíšeme pomocí klíčových slov if a else. Za slovo if patří podmínka, podle které se bude program
rozhodovat, zdali vykoná řádky mezi if a else a přeskočí řádky pod else, nebo jestli přeskočí řádky mezi if a
else a vykoná řádky pod else.
cislo = 19
if cislo % 2 == 0:
print("Číslo je sudé")
else:
print("Číslo je liché")
Povšimneme si také dvojteček, které jsou na konci řádků s if a else. Je také nesmírně důležité nezapomenout odsadit
řádky, na které chceme, aby se podmínky vztahovaly, odsadit. Toho můžeme docílit vybráním textu s nimi a stisknutím
tabulátoru.
Věnujme se teď části s podmínkou: cislo % 2 == 0. Nešálí vás zrak, opravdu vidíte dvě rovnítka za sebou. Jedno
rovnítko slouží k přiřazení do proměnné (tak jak to je na prvním řádku). Dvojité rovnítko ověřuje rovnost a vrací
boolean, tedy hodnotu pravda (True) nebo nepravda (False). Pokud je výsledek podmínky za if roven True, spustí
se pouze odsazený kód mezi if a else.
Stejně jako hodnoty můžeme podmínky ukládat v proměnných – jsou to také výrazy. Podmínku z příkladu můžeme uložit do proměnné a náš program učiníme čitelnějším.
cislo = 19
cislo_je_sude = cislo % 2 == 0
if cislo_je_sude:
print("Číslo je sudé")
else:
print("Číslo je liché")
Je hezké, že program můžeme číst skoro jako přírozený jazyk, tedy “Pokud (if) je číslo sudé, vytiskni …, jinak vytiskni …”.
Zkusíme nyní napsat program, který odhalí nenulová čísla. Vytvoříme podmínku “číslo není nula” a pokud platí, vypíšeme text.
cislo = 18
cislo_neni_nula = cislo != 0
if cislo_neni_nula:
print("Číslo není nulové")
Použili jsme podmiňovací operátor !=, tedy nerovná se. Také vidíme, že pokud je číslo nulové, nic nevypíšeme – celý
blok else je totiž volitelný.
Tip
Pokud bychom nemohli použít operátor
!=, můžeme použít klíčové slovonot. To podmínku v proměnné zneguje.cislo = 18 cislo_je_nula = cislo == 0 if not cislo_je_nula: print("Číslo není nulové")
Podmínky také můžeme spojovat pomocí klasických logických spojek “a” a “nebo”. Těmto operacím odpovídají klíčová slova
and a or. Program, který vypíše, jestli je číslo sudé a zároveň nenulové může vypadat takto:
cislo = 18
cislo_je_sude = cislo % 2 == 0
cislo_neni_nula = cislo != 0
if cislo_neni_nula and cislo_je_sude:
print("Číslo není nulové a je sudé")
V konstrukci if-else můžeme použít ještě jedno klíčové slovo, a to je elif (zkrácenina slov else if). V klasickém
if-else bloku se kód v if vykoná právě když je podmínka pravdivá, jinak se vykoná kód v else. Pokud bychom chtěli
po neúspěšném if vykonat jiný kód, ale pouze pod nějakou jinou podmínkou, použili bychom elif.
score = 85
if score >= 90:
grade = 1
elif score >= 80:
grade = 2
elif score >= 70:
grade = 3
elif score >= 60:
grade = 4
else:
grade = 5
print(f"Tvoje známka je {grade}.")
V podmínkách můžeme vytvářet nové proměnné a měnit proměnné, které již existují. Důležité je, že nové proměnné zůstávají
existovat i mimo if-else blok; to nám umožňuje vypsat proměnnou grade až po vyhodnocení podmínky. Program bychom
samozřejmě mohli napsat i tak, že by v každé podmínce byl samotný print, ale znovu platí to, že kdybychom chtěli
změnit to, co vypisujeme, museli bychom změnit více výskytů.
Zde se také setkáváme s porovnávacím operátorem >= (větší nebo rovno). Pokud bychom chtěli ověřit, zdali je číslo
striktně větší, použijeme operátor > (větší). Analogicky pro menší nebo rovno použijeme operátor <= (menší nebo
rovno) a pro striktně menší použijeme operátor < (menší).
Úlohy
- Liché
- Napište program, pro číslo vytiskne “Liché”, pokud je číslo liché, nebo nic. Zkuste vhodně použít operátor pro negaci podmínky.
- Kvadratická rovnice
- Napište program, který řeší kvadratickou rovnici. Budou zadány koeficienty
a,baca program vypíše reálná řešení. Pokud řešení neexistuje, program vypíše “Neexistuje řešení”.