Martin Svoboda

Martin Svoboda - Blog

Podmínky 3: if


Příkaz if tvoří páteř rozhodování ve většině programovacích jazyků. Umožňuje vykonat určité příkazy v našem programu podle toho, zda je podmínka splněna či nikoliv.

Základní použití příkazu ‘if’

Úplně nejjednodušeji by se příkaz if dal použít takto:

# podmínka if, ukázka

if True:
    print("Text se vypíše.")
    print("Protože za if je True")

print("Text se vypíše vždy.")

if False:
    print("Tento text se nikdy nevypíše.")
print("Text se vypíše vždy.")

Tento příkaz je zcela neužitečný, ale ukazuje v nejjednodušší podobě, co příkaz if dělá. Pokud se za if nachází výraz, který je True, vykoná se kód na dalších řádcích. Důležité je, aby tyto řádky byly odsazené tabulátorem nebo čtyřmi mezerami, čímž Pythonu říkáme, že patří do větve podmínky. Často se zapomíná na dvojtečku na konci řádku s if. Mně se to stává pořád!

Pokud podmínka v příkazu if není splněna (tj. vyhodnotí se jako False), odsazený blok kódu pod příkazem if se přeskočí a program pokračuje za ním.

Použití logických výrazů s ‘if’

Samozřejmě je běžnější používat za if nějaký logický výraz:

# podmínka if, ukázka

if 5 > 2:
    print("5 je větší než 2")

Tok kódu se v tomto případě větví podle toho, zda je podmínka splněna.

Příklad použití logických operátorů v Pythonu

Práce s proměnnými

Běžně používáme proměnné pro dynamické rozhodování:

# podmínka if, ukázka

vek = int(input("Kolik je ti let? "))

if vek >= 18:
    print("Jsi dospělý.")

Podmínek může být samozřejmě více. Zde je příklad s více podmínkami k zopakování logických operátorů:

# podmínka if, ukázka

cislo1 = 5
cislo2 = 5

if cislo1 > cislo2:
    print("cislo1 je větší než cislo2")

if cislo1 < cislo2:
    print("cislo1 je menší než cislo2")

if cislo1 == cislo2:
    print("cislo1 je rovno cislo2")

if cislo1 <= cislo2:
    print("cislo1 je menší nebo rovno cislo2")

if cislo1 >= cislo2:
    print("cislo1 je větší nebo rovno cislo2")

if cislo1 != cislo2:
    print("cislo1 je nerovno cislo2")

Hra hádání čísla

Teď už víme dost, abychom naprogramovali jednoduchou hru:

# hra hádání čísla

tajne_cislo = 7

print("Myslím si číslo od 1 do 10. Uhádneš ho?")
print("Máš 3 pokusy.")

pokus = 1
tip = int(input(f"{pokus}. pokus: "))
if tip == tajne_cislo:
    print(f"Správně! Uhádl jsi to na {pokus}. pokus.")
    exit() # ukončení programu

pokus += 1
tip = int(input(f"{pokus}. pokus: "))
if tip == tajne_cislo:
    print(f"Správně! Uhádl jsi to na {pokus}. pokus.")
    exit() # ukončení programu

pokus += 1
tip = int(input(f"{pokus}. pokus: "))
if tip == tajne_cislo:
    print(f"Správně! Uhádl jsi to na {pokus}. pokus.")
    exit() # ukončení programu

Tato hra pro tebe asi nebude moc zábavná, když znáš tajné číslo. Ale místo řádku s tajne_cislo můžeš použít funkci randint z modulu random, která vybere náhodné číslo.

#tajne_cislo = 7
from random import randint
tajne_cislo = randint(1, 10)

Tento kód vlož místo řádku s tajne_cislo = 7 a hra bude mnohem zábavnější. Víc o modulech a funkcích se dozvíš v dalších lekcích.

Logické operátory: AND, OR, NOT

Podmínky jsou skvělé, ale co když potřebujeme složitější logiku? Pro logické operace existují tři základní operátory: and, or a not. Jsou stejně důležité pro logické proměnné jako sčítání a odčítání pro číselné proměnné.

Operátor AND

Operátor and vrací True pouze, pokud jsou pravdivé oba výrazy na jeho stranách.

# AND

if True and True:
    print("vypíše se")

if True and False:
    print("nevypíše se")

if False and True:
    print("nevypíše se")

if False and False:
    print("nevypíše se")

Operátor OR

Operátor or vrací True, pokud je True alespoň jeden z výrazů.

# OR

if True or True:
    print("vypíše se")

if True or False:
    print("vypíše se")

if False or True:
    print("vypíše se")

if False or False:
    print("nevypíše se")

Operátor NOT

Operátor not mění hodnotu True na False a False na True.

# NOT

if not True:
    print("nevypíše se")

if not False:
    print("vypíše se")

Použití logických operátorů

Díky příkazu and můžeme vyřešit složitější problémy, které by jinak vyžadovaly více podmínek.

# použití logických operátorů

pocet_bodu = 10

if pocet_bodu < 10:
    print("Nedostatečný počet bodů.")

if pocet_bodu >= 10 and pocet_bodu < 20:
    print("Postačující počet bodů")

if pocet_bodu >= 20 and pocet_bodu < 30:
    print("Dobrý počet bodů")

if pocet_bodu >= 30:
    print("Výborný počet bodů")
Příklad použití logických operátorů v Pythonu

Více příkazů pro lepší čitelnost

Zde jen drobná poznámka. Mnoho příkazů existuje pro lepší čitelnost kódu. Například bez and bychom museli napsat:

if pocet_bodu >= 20:
    if pocet_bodu < 30:
        print("Dobrý počet bodů")

Zde jsou dva vnořené příkazy if. V porovnání s předchozím kódem jde o komplikovanější zápis.

if pocet_bodu >= 20 and pocet_bodu < 30:
    print("Dobrý počet bodů")

Příkazů, které zlepšují čitelnost kódu nebo usnadňují jeho psaní, je většina. Kvalita kódu je důležitá, protože kód bude číst nejenom počítač, ale i další programátoři.

Kontrolní otázky

Pokud to dokážeš vysvětlit někomu jinému vlastními slovy, jsi na dobré cestě tomu rozumět. Dokážeš odpovědět na tyto otázky?

  1. Jaké je hlavní účel příkazu if v programování?
  2. V jakých scénářích byste použili podmíněné příkazy typu if?
  3. Jaký význam má v jazyce Python odsazení, zejména v kontextu příkazů if?
  4. Který symbol se používá na konci podmínky if?
  5. Popiš funkci operátoru and. Kdy vrací operátor True?
  6. Jak se liší operátor or od operátoru and?
  7. Jaká je funkce operátoru not?
  8. Vzhledem k úryvku kódu:
    age = 15
    if age >= 18:
        print("Dospělý")
    Jaký bude výstup tohoto kódu?
  9. Uvažujme následující kód:
    x = 10
    y = 20
    if x > 5 and y < 30:
        print("Obě podmínky jsou pravdivé")
    Vypíše se zpráva “Obě podmínky jsou pravdivé”? Proč ano nebo proč ne?
  10. Umíte vnořovat příkazy if? Pokud ano, uveďte stručný příklad.

Kvízy

Kvíz:

Příkaz if lze použít k rozhodování v programu.

  1. Pravda
  2. Nepravda
Kvíz:

Operátor and vrací True pouze tehdy, pokud jsou oba jeho operandy True.

  1. Pravda
  2. Napravda
Kvíz:

Operátor or vrací True, pokud je alespoň jeden z jeho operandů True.

  1. Pravda
  2. Napravda

Cvičení

Cvičení 1:

Napište program v jazyce Python, který se zeptá uživatele na číslo a poté vypíše řetězec označující, zda je toto číslo kladné nebo záporné.

Cvičení 2:

Napište program v jazyce Python, který se zeptá uživatele na jeho věk a poté mu sdělí, zda je nezletilý (mladší 18 let), dospělý (18 až 64 let) nebo senior (65 let a více).

Cvičení 3:

Napište program v jazyce Python, který se uživatele zeptá na známku (od 0 do 100). Poté by měl vypsat, zda známka odpovídá “A” (90 až 100), “B” (80 až 89), “C” (70 až 79), “D” (60 až 69) nebo “F” (pod 60).

Cvičení 4:

Uprav hru hádání čísla tak, aby se po uhodnutí čísla program ukončil.

Cvičení 5:

Uprav hru hádání čísla tak, aby se uživatel dozvěděl zda je jeho tip větší nebo menší než tajné číslo.

Cvičení 6:

Napište program v jazyce Python, který se uživatele zeptá na číslo a řekne mu, zda je sudé nebo liché.