V této kapitle rozšíříme naše znalosti podmínek a cyklů. Vyzkoušíme si, jak vložit více podmínek do jednoho příkazu if a jak určit vztah mezi nimi. Dále si vyzkoušíme, jak pracovat s cykly i bez seznamů.

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
wateringTruck = True
if rain == True or wateringTruck == True:
  wetStreet = True
else:
  wetStreet = False
print(wetStreet)

Tip

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

rain = True
wateringTruck = True
if rain or wateringTruck:
  wetStreet = True
else:
  wetStreet = False
print(wetStreet)

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.

wetStreet = False
goOut = True
if wetStreet and goOut:
  wetShoes = True
else:
  wetShoes = False
print(wetShoes)

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 wateringTruck si vložíme do závorky a za něj napíšeme logický násobek and proměnnou goOut.

rain = True
wateringTruck = False
goOut = True
if (rain or wateringTruck) and goOut:
  wetShoes = True
else:
  wetShoes = False
print(wetShoes)

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: "))
clubMember = input("Jste členem klubu přátel divadla? [ano/ne] ")
if (age <= 26 or age >= 65) and clubMember:
  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í.

Další možnosti podmínek

1

Dělitelnost více čísly

to dáš

Požádejme uživatele, ať zadá celé číslo. Napiš program který zjistí, zda je číslo dělitelné 3 i 4 současně.

Tip: nezapomeňte si zadané číslo převést na int. Tip 2: K ověření dědičnosti použij operátor % - zbytek po celočíselném dělení a zkontroluj, zda je výsledek 0. Například 15 % 5 vrací 0, protože 15 je dělitelné 5.

2

Gymnázium

to dáš

Matematické gymnázium nabízí aplikaci, která sděluje informaci o povinnosti vykonání přijímací zkoušky. Požádejte uživatele o zadání známky z matematiky a průměru všech známek na posledním vysvědčení. Pokud má zájemce průměr známek nižší než 1.8 a z matematiky nejhůře dvojku, vypište text: "Přijmeme vás bez přijímací zkoušky.". V opačném případě vypište "Musíte splnit přijímací zkoušku.".

3

Gymnázium

zapni hlavu

Modifikujme si předchozí příklad. Horší známku z matematiky může student kompenzovat tím, že uspěje v matematické olympiádě. Přidejte tedy dotaz, zda se uchazeč zúčastnil okresního kola matematické olympiády. Pokud ano, bude mu zkouška odpuštěna, i kdyby jeho známka z matematiky byla horší. Požadavek na celkový průměr známek je však třeba stále dodržet.

Otázka může vypadat například takto:

input("Zúčastnil ses okresního kola krajské olympidáy? [a/n] ")

Pokud se student olympidáy zůstatnil, odpoví a.

Bonusová cvičení
Nepovinné úložky, které můžete řešit pokud máte chuť na větší výzvu nebo si chcete látku procvičit víc do hloubky.
4

Soutěž

smrt v přímém přenosu

Divadlo Pěst na oko pořádá soutěž o lístky na premiéru nového představení Zločin v podmínce. Pro účast v soutěži musí zájemce splnit následující dvě podmínky:

  • Sdílel alespoň 5 příspěvků divadla na sociálních sítích.
  • Letos navštívil(a) alespoň 5 představení.

Současně platí, že soutěžit můžou všichni členové Klubu přátel Divadla Pěst na oko, i kdyby podmínky nesplnili.

Tvým úkolem je vytvořit program, který se uživatele zeptá na všechny potřebné informace (stačí odpověď ano/ne) a vyhodnotí, zda se může zúčastnit soutěže.