29. Podmínky v Pythonu#

29.1. Teorie#

Podmínky jsou vedle cyklů základním stavebním prvkem programování, který umožňuje provádět různé akce na základě splnění určitých podmínek. V Pythonu se podmínky zapisují pomocí klíčových slov if, elif (zkratka pro „else if“) a else. Podmínky vytvářejí větvení v programu, což znamená, že různé části kódu budou prováděny v závislosti na hodnotě určitých výrazů.

29.1.1. Testování, zda je text v řetězci:#

text = "Hello, Python!"
if "Python" in text:
    print("Řetězec obsahuje slovo 'Python'.")
else:
    print("Řetězec neobsahuje slovo 'Python'.")

29.1.2. Testování, zda se dvě čísla nebo textové řetězce rovnají:#

cislo1 = 5
cislo2 = 5
if cislo1 == cislo2:
    print("Čísla se rovnají.")
else:
    print("Čísla se nerovnají.")

29.1.3. Testování, zda je jedno číslo menší než druhé:#

cislo1 = 10
cislo2 = 20
if cislo1 < cislo2:
    print("První číslo je menší než druhé.")
else:
    print("První číslo není menší než druhé.")

Podobně je možno použít opačnou nerovnost > a neostré nerovnosti <= a >=.

29.1.4. Testování, zda je prvek obsažen v seznamu:#

seznam = [1, 2, 3, 4, 5]
prvek = 3
if prvek in seznam:
    print("Prvek je obsažen v seznamu.")

Větev s else je nepovinná, pokud není přítomna a podmínka neplatí, neprovede se nic.

29.1.5. Použití operátorů and a or v podmínkách#

Někdy je nutné, aby bylo splněno současně více podmínek, nebo stačí, aby byla splněna jedna z několika podmínek. K tomuto spojujeme podmínky pomocí logických operátorů and a or.

29.1.5.1. Operátor and#

Pokud požadujeme, aby byly splněny obě nebo všechny podmínky, používáme operátor and.

cislo = 10
if cislo > 5 and cislo < 20:
    print("Číslo je v rozmezí 5 až 20.")
else:
    print("Číslo není v daném rozmezí.")

V tomto příkladě musí být obě podmínky cislo > 5 a cislo < 20 pravdivé, aby byl výraz celkově pravdivý.

29.1.5.2. Operátor or#

Pokud potřebujeme zajistit, že je splněna alespoň jedna kterákoliv z podmínek, používáme operátor or.

cislo = 3
if cislo <= 5 or cislo => 10:
    print("Číslo je buď menší nebo rovno než 5 nebo větší nebo rovno než 10.")
else:
    print("Číslo je mezi hodnotami 5 a 10.")

Operátory and a or umožňují komplexní logiku ve vašich podmínkách a umožňují vám řídit program na základě více různých kritérií a situací. Používejte je opatrně, aby byl váš kód čitelný a snadno udržovatelný.

29.2. Úkol#

Nadefinujte funkci logisticky_rust, která pro zadané x a volitelně zadané r a K vypočítá hodnotu \(rx\left(1-\frac xK\right)\) za předpokladu, že hodnoty r a K jsou kladné a hodnota x nezáporná. V opačném případě funkce vrátí hodnotu 0. Pokud nebudou zadány volitelné parametry, bude použito r=1 a K=1. Vyjděte z předpřipraveného kódu, doplňte trojici podmínek spojenou vhodnými operátory a doplňte výrazy za slovem return. Využijte toho, že při prvním zpracování slova return je vypočtena žádaná funkční hodnota a provádění funkce se ukončí.

Můžete si graf i vykreslit přidáním následujícího kódu.

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1,1.2)
y = [logisticky_rust(i) for i in x]
plt.plot(x,y)

Výsledkem by měl být následující obrázek.

Všimněte si, že do funkce logisticky_rust definované pomocí větvení if není možné dosadit za proměnnou na vstupu seznam a funkci tedy není možné použít na vektorové proměnné. Proto v kódu pro kreslení používáme konstrukci vytvářející seznam hodnot v proměnné y hodnotu po hodnotě.