Nauč se Python > Kurzy > Začátečnický kurz Pyladies > První program > Porovnávání

Porovnávání

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

V domácím projektu jsme si ukázaly 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
** 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 Větší než, menší než
<=, >= 3 <= 5, 3 >= 5 Větší nebo rovno, menší nebo rovno

Hodnoty provnání jsou takzvané booleovské hodnoty (angl. boolean, podle G. Boolea). V Pythonu se používají vždycky, když potřebujeme 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 se dají přiřazovat do proměnných:

pravda = 1 < 3
print(pravda)

nepravda = 1 == 3
print(nepravda)

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

Slova True a False jdou v programu použít i přímo, jen je potřeba dávat pozor na velikost písmen:

print(True)
print(False)

Podmínky

Teď oprášíme program na výpočet obvodu a obsahu. Do nového souboru, třeba ~/pyladies/02/if.py, napiš následující program. Co se stane, když jako stranu zadáš záporné číslo? Dává výstup smysl?

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

Tady je vidět, jak počítač dělá přesně, co se mu řekne, a 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 nebo nulu.

Řešení

A nyní řekneme počítači, aby tuhle proměnnou použil. K tomu se používá dvojice příkazů if (pokud) a else (jinak). Nejlepší bude je ukázat na příkladu:

strana = float(input('Zadej stranu 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('Už jsi někdy viděla záporný č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.
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.

Čistě technicky, odsazení nemusí být o čtyři mezery. Může být třeba o dvě nebo o jedenáct, nebo dokonce o 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('Návštěvníky z budoucnosti tady nevidíme rádi.')

Kámen nůžky papír

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. Přejít na stejnou lekci v kurzu pro samouky.