Kódím.cz
5

Podmínky

V této kapitole naučíme naše programy rozhodovat se a měnit svoje chování podle zadaného vstupu.

Čtení na doma: Vícenásobné podmínky

Uvažujme, že chceme, aby se náš program rozhodoval na základě více podmínek. Máme-li dvě podmínky, musíme si nejprve určit vztah mezi nimi. Příkazu if totiž vždy musíme předat jen jednu hodnotu True nebo False. Musíme tedy zkombinovat obě podmínky tak, aby z nich vzešel jen jeden výsledek.

Máme dvě možnosti, jak podmínky kombinovat:

  • logický součet (or),
  • logický součin (and).

Logické sčítání - OR

Nejprve si ukážeme, jak funguje logický součet. Výsledek logického součtu je True, jakmile má hodnotu True alespoň jeden ze dvou výrazů, za kterých se součet skládá.

Uvažujme následující dvě skutečnosti:

  • Venku pršelo.
  • Projel kropící vůz.

Za jakých okolností bude ulice mokrá? K tomu, aby byla ulice mokrá, stačí, aby byla splněna jedna ze dvou skutečností.

Pršelo Kropící vůz Mokrá ulice
False False False
True False True
False True True
True True True

Při zápisu do Pythonu používáme slovo or:

rain = True
watering_truck = True
if rain == True or watering_truck == True:
    wet_street = True
else:
    wet_street = False
print(wet_street)

Tip

Část == True můžete vynechat, následující kód provede to samé.

rain = True
watering_truck = True
if rain or watering_truck:
    wet_street = True
else:
    wet_street = False
print(wet_street)

Logický součin - AND

Výsledek logického součinu je True pouze tehdy, mají-li hodnotu True oba výrazy, ze kterých se součin skládá. Uvažujme například dvě skutečnosti:

  • Venku je mokrá ulice.
  • Jdu ven.

Za jakých okolností budu mít mokré boty? Pouze v případě, kdy mají oba z předchozích výrazů hodnotu True. Pokud bychom zůstali doma nebo naopak vyšli za suchého počasí, naše boty zůstanou suché.

Mokrá ulice Jdu ven Mokré boty
False False False
True False False
False True False
True True True

K zápisu do Pythonu používáme slovo and.

wet_street = False
go_out = True
if wet_street and go_out:
    wet_shoes = True
else:
    wet_shoes = False
print(wet_shoes)

Kombinace součtu a součinu

Součet a součin můžeme zkombinovat do jedné podmínky pomocí závorek. Zkusme si třeba vyhodnotit, zda budou naše boty mokré, pomocí informace o dešti a projetí kropícího vozu. Logický součet or proměnných rain a watering_truck si vložíme do závorky a za něj napíšeme logický násobek and proměnnou go_out.

rain = True
watering_truck = False
go_out = True
if (rain or watering_truck) and go_out:
    wet_shoes = True
else:
    wet_shoes = False
print(wet_shoes)

Kombinace operátorů

Další příklad nás zavede zpět k divadlu Pěst na oko. Uvažujme, že divadlo zjednodušilo cenovou politiku a dává slevu 50 % všem osobám do 26 let a nad 65 let. Náš program má určitě cenu vstupenky pro konkrétního návštěvníka na základě jeho věku. Pro poskytnutí slevy však musí být návštěvník členem klubu Přátele Divadla Pěst na oko.

price = 250
age = int(input("Zadejte věk: "))
club_member = input("Jste členem klubu přátel divadla? [ano/ne] ")
club_member = club_member.lower() == "ano"
if (age <= 26 or age >= 65) and club_member:
    price = round(0.5 * price)
print(f"Cena vstupenky je {price}.")

Tip

Závorky můžeš někdy vynechat, pokud ale kombinuješ operátory or a and v jedné podmínce, použitím závorek si vždy usnadníš život. Nemusíš totiž myslet nad pravidly pro priority logických operací. Ta říkají, že operace and má vyšší prioritu než or. Je to podobné, jako když má běžné násobení vyšší prioritu než sčítání.

Cvičení: Další možnosti podmínek

Bonusy