Nauč se Python > Kurzy > Lite Python Workshop > Řídící struktury > Porovnávání

Porovnávání #

Pamatuješ si ještě, co je to operátor?

V domácím projektu jsme si ukázali základní aritmetické operátory. Přidáme-li jeden další (//), jsou to tyhle:

Symbol Příklad Popis
+, -, *, / 1 + 1 Základní aritmetika
- -5 Negace
//; % 7 // 2; 7 % 2 Dělení se zbytkem (celočíselné dělení); zbytek po dělení
** 3 ** 2 Umocnění (3 na druhou)

Python ale zná i další druhy operátorů. Důležité jsou operátory porovnávací. Zkus si co dělají! (Buď z programu pomocí print, nebo pusť python z příkazové řádky.)

Symbol Příklad Popis
==, != 1 == 1, 1 != 1 Je rovno, není rovno
<, > 3 < 5, 3 > 5 Menší než, větší než
<=, >= 3 <= 5, 3 >= 5 Menší nebo rovno, větší nebo rovno

Hodnoty provnání jsou takzvané booleovské hodnoty (angl. boolean, podle G. Boolea). V Pythonu je můžeš použít vždycky, když potřebuješ vědět, jestli něco platí nebo neplatí. Jsou jenom dvě – buď True (pravda), nebo False (nepravda).

Jako všechny hodnoty, True a False můžeš přiřadit do proměnných:

pravda = 1 < 3
print(pravda)

nepravda = 1 == 3
print(nepravda)

Všimni si, že rovnost zjistíš pomocí dvou rovnítek: 3 == 3. Jedno rovnítko přiřazuje do proměnné; dvě rovnítka porovnávají.

Slova True a False můžeš v programu použít i přímo, jen si dej pozor na velikost písmen:

print(True)
print(False)

Podmínky #

Teď oprášíme program na výpočet obvodu a obsahu.

Otevři si v editoru nový soubor. Jestli ještě v adresáři, kde máš soubory ke kurzům Pythonu, nemáš adresář pro tuto lekci (třeba 02), vytvoř si ho. Nový soubor ulož do něj pod jménem if.py.

Do souboru pak napiš následující program:

strana = float(input('Zadej stranu čtverce v centimetrech: '))
print('Obvod čtverce se stranou', strana, 'je', 4 * strana, 'cm')
print('Obsah čtverce se stranou', strana, 'je', strana * strana, 'cm2')

Program spusť. Funguje?

Co se stane, když jako stranu zadáš záporné číslo? Dává výstup smysl?

Tady je vidět, jak počítač dělá přesně, co se mu řekne. Nepřemýšlí o významu. Bylo by dobré uživateli, který zadá záporné číslo, přímo říct, že zadal blbost. Jak na to?

Nejdřív zkus nastavit proměnnou která bude True, když uživatel zadal kladné číslo.

Řešení

A nyní řekni počítači, aby se na základě hodnoty této proměnné rozhodl, co má udělat. K tomu můžeš použít dvojici příkazů if (pokud) a else (jinak):

strana = float(input('Zadej stranu čtverce v centimetrech: '))
cislo_je_spravne = strana > 0

if cislo_je_spravne:
    print('Obvod čtverce se stranou', strana, 'je', 4 * strana, 'cm')
    print('Obsah čtverce se stranou', strana, 'je', strana * strana, 'cm2')
else:
    print('Strana musí být kladná, jinak z toho nebude čtverec!')

print('Děkujeme za použití geometrické kalkulačky.')

Neboli: po if následuje podmínka (angl. condition), což je výraz, podle kterého se budeme rozhodovat. Za podmínkou je dvojtečka. Potom následují příkazy, které se provedou, pokud je podmínka pravdivá. Všechny jsou odsazeny o čtyři mezery.

Čtyři mezery neznamenají, že musíš čtyřikrát zmáčknout mezerník! K odsazení použij klávesu Tab, která vloží správný počet mezer. (Pokud ne, nemáš správně nastavený editor – podívej se do lekce o instalaci.) Pomocí Shift+Tab můžeš odsazení zase zmenšit.

A ani Tab není vždycky potřeba. Pokud napíšeš řádek s if bez chyby, některé editory za tebe další řádek odsadí automaticky.

Po téhle části stačí napsat neodsazené else:, zase s dvojtečkou na konci, a odsazené příkazy, které se provedou v opačném případě.
Potom můžeš psát příkazy, které se provedou vždycky – ty odsazené nebudou, podmíněná část programu už skončila.

Vzato čistě technicky, odsazení nemusí být o čtyři mezery. Může být třeba o dvě nebo o jedenáct, nebo se dokonce dá místo mezer použít tabulátor. V rámci jednoho bloku musí být ale odsazení vždycky stejné, takže když pak na jednom programu spolupracuje více lidí, musí se shodnout. No a na čtyřech mezerách se shodla většina Pythonního světa.

Další podmíněné příkazy #

Někdy není else vůbec potřeba. V následujícím programu se nedělá nic navíc, pokud je číslo nenulové:

cislo = int(input('Zadej číslo, přičtu k němu 3: '))
if cislo == 0:
    print('Jé, to je jednoduché!')
print(cislo, '+ 3 =', cislo + 3)

Někdy je naopak potřeba podmínek několik, k čemuž slouží příkaz elif – kombinace else a if. Dává se „mezi“ bloky if a else. Příkazů elif může být za jedním if-em několik, ale vždy se provede jen jedna „větev“: ta první, jejíž podmínka je splněna.

vek = int(input('Kolik ti je let? '))
if vek >= 150:
    print('A ze kterépak jsi planety?')
elif vek >= 18:
    # Tahle větev se např. pro "200" už neprovede.
    print('Můžeme nabídnout: víno, cider, nebo vodku.')
elif vek >= 1:
    print('Můžeme nabídnout: mléko, čaj, nebo vodu')
elif vek >= 0:
    print('Sunar už bohužel došel.')
else:
    # Nenastala ani nedna ze situací výše – muselo to být záporné
    print('Pro návštěvy z budoucnosti bohužel nemáme nic v nabídce.')

Zanořování #

Příkazy if se dají zanořovat (angl. nest): jeden může být vevniř ve druhém. Třeba takhle:

tah_pocitace = 'kámen'
tah_cloveka = input('kámen, nůžky, nebo papír? ')

if tah_cloveka == 'kámen':
    if tah_pocitace == 'kámen':
        print('Plichta.')
    elif tah_pocitace == 'nůžky':
        print('Vyhrála jsi!')
    elif tah_pocitace == 'papír':
        print('Počítač vyhrál.')
elif tah_cloveka == 'nůžky':
    if tah_pocitace == 'kámen':
        print('Počítač vyhrál.')
    elif tah_pocitace == 'nůžky':
        print('Plichta.')
    elif tah_pocitace == 'papír':
        print('Vyhrála jsi!')
elif tah_cloveka == 'papír':
    if tah_pocitace == 'kámen':
        print('Vyhrála jsi!')
    elif tah_pocitace == 'nůžky':
        print('Počítač vyhrál.')
    elif tah_pocitace == 'papír':
        print('Plichta.')
else:
    print('Nerozumím.')

Vida, tvoje první hra! Jen je ještě potřeba před každým spuštěním přepsat řetězec na prvním řádku. Jak zařídit, aby počítač vybíral náhodně, to si povíme později.


Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem.