Podmínky

Spoustu věcí v kódu chceme provádět, jen pokud jsou splněny určité podmínky. Proto má Python podmíněné příkazy.

Zkusíme napsat program, který ověřuje tajné heslo. Tenhle program napíše True, když zadáš slovo čokoláda:

heslo = input('Zadej heslo: ')
print(heslo == 'čokoláda')

Když – tak

Vypsání True ale není moc zajímavé. Lepší program by dělal tohle:

  • Zeptá se na tajné heslo
  • Když je heslo správné:
    • Pustí uživatele dovnitř

Anglicky se „když“ řekne if. A to je i jméno Pythoního příkazu. Používá se takhle:

heslo = input('Zadej heslo: ')
if heslo == 'čokoláda':
    print('Správně! Račte vstoupit.')

Podmíněný příkaz začíná if, pokračuje podmínkou (třeba porovnáním) a končí dvojtečkou.

Po řádkem s if je příkaz odsazený – na začátku řádku jsou 4 mezery.

Podle toho Python pozná, že tuhle část programu má provést, jen když je podmínka pravdivá.

Ulož a spusť:

(venv) $ python python_intro.py
Zadej heslo: čokoláda
Správně! Můžeš vstoupit.
(venv) $ python python_intro.py
Zadej heslo: sezam

Jinak

V předchozím příkladu byl kód proveden pouze v případě, že podmínka byla splněna. Ještě lepší program by ale:

  • Zeptá se na tajné heslo
  • Když je heslo správné:
    • Pustí uživatele dovnitř
  • Jinak (tedy pokud heslo nebylo správné):
    • Spustí alarm

K tomu má Python příkaz else – „jinak“:

heslo = input('Zadej heslo: ')
if heslo == 'čokoláda':
    print('Správně! Račte vstoupit.')
else:
    print('POZOR! POZOR!')
    print('NEOPRÁVNĚNÝ VSTUP!')

Funuje to?

Více možností

Občas se stane, že se program musí rozhodnout mezi více možnostmi. K tomu slouží příkaz elif, zkratka znglického else if – „jinak, pokud“.

Napišme program, který okomentuje hlasitost hudby:

  • Zeptá se na hlasitost, a odpověď uloží jako číslo.
  • Když je hlasitost do 20:
    • vypíše „Je to dost potichu.“
  • Jinak, když je hlasitost do 40:
    • vypíše „Jako hudba v pozadí dobré.“
  • Jinak, když je hlasitost do 60:
    • vypíše „Skvělé, slyším všechny detaily.“
  • Jinak, když je hlasitost do 80:
    • vypíše „Dobré na párty.“
  • Jinak, když je hlasitost do 100:
    • vypíše „Trochu moc nahlas!“
  • Jinak:
    • vypíše „Krvácí mi uši!“

V Pythonu:

hlasitost = int(input('Jaká je nastavená hlasitost rádia? '))
if hlasitost < 20:
     print("Je to dost potichu.")
elif hlasitost < 40:
     print("Jako hudba v pozadí dobré.")
elif hlasitost < 60:
     print("Skvělé, slyším všechny detaily.")
elif hlasitost < 80:
     print("Dobré na party.")
elif hlasitost < 100:
     print("Trochu moc nahlas!")
else:
    print("Krvácí mi uši!")
(venv) $ python python_intro.py
Jaká je nastavená hlasitost rádia? 28
Jako hudba v pozadí dobré.

Všimni si, že se vybere vždycky jedna alternativa. Když zadáš 28, Python se dostane k hlasitost < 40, vypíše příslušnou hlášku a další možnosti přeskočí.

Shrnutí

Co jsi viděla v této lekci?

  • Příkazy if (pokud), elif (jinak, pokud) a else (jinak) podmiňují jiné příkazy.
  • Odsazení se používá pro podmíněné příkazy, které následují po if apod..
{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2018/snake-brno:intro:9",
      "title": "PodmĂ­nky",
      "html": "\n          \n    \n\n    <h1>Podm&#xED;nky</h1>\n<p>Spoustu v&#x11B;c&#xED; v&#xA0;k&#xF3;du chceme prov&#xE1;d&#x11B;t, jen pokud jsou spln&#x11B;ny ur&#x10D;it&#xE9; podm&#xED;nky.\nProto m&#xE1; Python <em>podm&#xED;n&#x11B;n&#xE9; p&#x159;&#xED;kazy</em>.</p>\n<p>Zkus&#xED;me napsat program, kter&#xFD; ov&#x11B;&#x159;uje tajn&#xE9; heslo.\nTenhle program nap&#xED;&#x161;e <code>True</code>, kdy&#x17E; zad&#xE1;&#x161; slovo <code>&#x10D;okol&#xE1;da</code>:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">heslo</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&apos;Zadej heslo: &apos;</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">heslo</span> <span class=\"o\">==</span> <span class=\"s1\">&apos;&#x10D;okol&#xE1;da&apos;</span><span class=\"p\">)</span>\n</pre></div><h2>Kdy&#x17E; &#x2013; tak</h2>\n<p>Vyps&#xE1;n&#xED; <code>True</code> ale nen&#xED; moc zaj&#xED;mav&#xE9;.\nLep&#x161;&#xED; program by d&#x11B;lal tohle:</p>\n<ul>\n<li>Zept&#xE1; se na tajn&#xE9; heslo</li>\n<li>Kdy&#x17E; je heslo spr&#xE1;vn&#xE9;:<ul>\n<li>Pust&#xED; u&#x17E;ivatele dovnit&#x159;</li>\n</ul>\n</li>\n</ul>\n<p>Anglicky se &#x201E;kdy&#x17E;&#x201C; &#x159;ekne <em>if</em>. A to je i jm&#xE9;no Python&#xED;ho p&#x159;&#xED;kazu.\nPou&#x17E;&#xED;v&#xE1; se takhle:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">heslo</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&apos;Zadej heslo: &apos;</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> <span class=\"n\">heslo</span> <span class=\"o\">==</span> <span class=\"s1\">&apos;&#x10D;okol&#xE1;da&apos;</span><span class=\"p\">:</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;Spr&#xE1;vn&#x11B;! Ra&#x10D;te vstoupit.&apos;</span><span class=\"p\">)</span>\n</pre></div><p>Podm&#xED;n&#x11B;n&#xFD; p&#x159;&#xED;kaz za&#x10D;&#xED;n&#xE1; <code>if</code>, pokra&#x10D;uje podm&#xED;nkou (t&#x159;eba porovn&#xE1;n&#xED;m)\na kon&#x10D;&#xED; dvojte&#x10D;kou.</p>\n<p>Po &#x159;&#xE1;dkem s&#xA0;<code>if</code> je p&#x159;&#xED;kaz <em>odsazen&#xFD;</em> &#x2013; na za&#x10D;&#xE1;tku &#x159;&#xE1;dku jsou 4 mezery.</p>\n<p>Podle toho Python pozn&#xE1;, &#x17E;e tuhle &#x10D;&#xE1;st programu m&#xE1; prov&#xE9;st,\njen kdy&#x17E; je podm&#xED;nka pravdiv&#xE1;.</p>\n<p>Ulo&#x17E; a spus&#x165;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">(venv) $ </span>python python_intro.py\n<span class=\"go\">Zadej heslo: &#x10D;okol&#xE1;da</span>\n<span class=\"go\">Spr&#xE1;vn&#x11B;! M&#x16F;&#x17E;e&#x161; vstoupit.</span>\n</pre></div><div class=\"highlight\"><pre><span></span><span class=\"gp\">(venv) $ </span>python python_intro.py\n<span class=\"go\">Zadej heslo: sezam</span>\n</pre></div><h2>Jinak</h2>\n<p>V&#xA0;p&#x159;edchoz&#xED;m p&#x159;&#xED;kladu byl k&#xF3;d proveden pouze v p&#x159;&#xED;pad&#x11B;, &#x17E;e podm&#xED;nka byla spln&#x11B;na.\nJe&#x161;t&#x11B; lep&#x161;&#xED; program by ale:</p>\n<ul>\n<li>Zept&#xE1; se na tajn&#xE9; heslo</li>\n<li>Kdy&#x17E; je heslo spr&#xE1;vn&#xE9;:<ul>\n<li>Pust&#xED; u&#x17E;ivatele dovnit&#x159;</li>\n</ul>\n</li>\n<li>Jinak <small>(tedy pokud heslo nebylo spr&#xE1;vn&#xE9;)</small>:<ul>\n<li>Spust&#xED; alarm</li>\n</ul>\n</li>\n</ul>\n<p>K&#xA0;tomu m&#xE1; Python p&#x159;&#xED;kaz <code>else</code> &#x2013; &#x201E;jinak&#x201C;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">heslo</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&apos;Zadej heslo: &apos;</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> <span class=\"n\">heslo</span> <span class=\"o\">==</span> <span class=\"s1\">&apos;&#x10D;okol&#xE1;da&apos;</span><span class=\"p\">:</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;Spr&#xE1;vn&#x11B;! Ra&#x10D;te vstoupit.&apos;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;POZOR! POZOR!&apos;</span><span class=\"p\">)</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;NEOPR&#xC1;VN&#x11A;N&#xDD; VSTUP!&apos;</span><span class=\"p\">)</span>\n</pre></div><p>Funuje to?</p>\n<h2>V&#xED;ce mo&#x17E;nost&#xED;</h2>\n<p>Ob&#x10D;as se stane, &#x17E;e se program mus&#xED; rozhodnout mezi v&#xED;ce mo&#x17E;nostmi.\nK&#xA0;tomu slou&#x17E;&#xED; p&#x159;&#xED;kaz <code>elif</code>, zkratka znglick&#xE9;ho <em>else if</em> &#x2013; &#x201E;jinak, pokud&#x201C;.</p>\n<p>Napi&#x161;me program, kter&#xFD; okomentuje hlasitost hudby:</p>\n<ul>\n<li>Zept&#xE1; se na hlasitost, a odpov&#x11B;&#x10F; ulo&#x17E;&#xED; jako &#x10D;&#xED;slo.</li>\n<li>Kdy&#x17E; je hlasitost do 20:<ul>\n<li>vyp&#xED;&#x161;e &#x201E;Je to dost potichu.&#x201C;</li>\n</ul>\n</li>\n<li>Jinak, kdy&#x17E; je hlasitost do 40:<ul>\n<li>vyp&#xED;&#x161;e &#x201E;Jako hudba v pozad&#xED; dobr&#xE9;.&#x201C;</li>\n</ul>\n</li>\n<li>Jinak, kdy&#x17E; je hlasitost do 60:<ul>\n<li>vyp&#xED;&#x161;e &#x201E;Skv&#x11B;l&#xE9;, sly&#x161;&#xED;m v&#x161;echny detaily.&#x201C;</li>\n</ul>\n</li>\n<li>Jinak, kdy&#x17E; je hlasitost do 80:<ul>\n<li>vyp&#xED;&#x161;e &#x201E;Dobr&#xE9; na p&#xE1;rty.&#x201C;</li>\n</ul>\n</li>\n<li>Jinak, kdy&#x17E; je hlasitost do 100:<ul>\n<li>vyp&#xED;&#x161;e &#x201E;Trochu moc nahlas!&#x201C;</li>\n</ul>\n</li>\n<li>Jinak:<ul>\n<li>vyp&#xED;&#x161;e &#x201E;Krv&#xE1;c&#xED; mi u&#x161;i!&#x201C;</li>\n</ul>\n</li>\n</ul>\n<p>V&#xA0;Pythonu:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">hlasitost</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&apos;Jak&#xE1; je nastaven&#xE1; hlasitost r&#xE1;dia? &apos;</span><span class=\"p\">))</span>\n<span class=\"k\">if</span> <span class=\"n\">hlasitost</span> <span class=\"o\">&lt;</span> <span class=\"mi\">20</span><span class=\"p\">:</span>\n     <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Je to dost potichu.&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">elif</span> <span class=\"n\">hlasitost</span> <span class=\"o\">&lt;</span> <span class=\"mi\">40</span><span class=\"p\">:</span>\n     <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Jako hudba v pozad&#xED; dobr&#xE9;.&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">elif</span> <span class=\"n\">hlasitost</span> <span class=\"o\">&lt;</span> <span class=\"mi\">60</span><span class=\"p\">:</span>\n     <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Skv&#x11B;l&#xE9;, sly&#x161;&#xED;m v&#x161;echny detaily.&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">elif</span> <span class=\"n\">hlasitost</span> <span class=\"o\">&lt;</span> <span class=\"mi\">80</span><span class=\"p\">:</span>\n     <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Dobr&#xE9; na party.&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">elif</span> <span class=\"n\">hlasitost</span> <span class=\"o\">&lt;</span> <span class=\"mi\">100</span><span class=\"p\">:</span>\n     <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Trochu moc nahlas!&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Krv&#xE1;c&#xED; mi u&#x161;i!&quot;</span><span class=\"p\">)</span>\n</pre></div><div class=\"highlight\"><pre><span></span><span class=\"gp\">(venv) $ </span>python python_intro.py\n<span class=\"go\">Jak&#xE1; je nastaven&#xE1; hlasitost r&#xE1;dia? 28</span>\n<span class=\"go\">Jako hudba v pozad&#xED; dobr&#xE9;.</span>\n</pre></div><p>V&#x161;imni si, &#x17E;e se vybere v&#x17E;dycky jedna alternativa.\nKdy&#x17E; zad&#xE1;&#x161; <code>28</code>, Python se dostane k&#xA0;<code>hlasitost &lt; 40</code>, vyp&#xED;&#x161;e\np&#x159;&#xED;slu&#x161;nou hl&#xE1;&#x161;ku a dal&#x161;&#xED; mo&#x17E;nosti p&#x159;esko&#x10D;&#xED;.</p>\n<h2>Shrnut&#xED;</h2>\n<p>Co jsi vid&#x11B;la v&#xA0;t&#xE9;to lekci?</p>\n<ul>\n<li>P&#x159;&#xED;kazy <strong>if</strong> (pokud), <strong>elif</strong> (jinak, pokud) a <strong>else</strong> (jinak)\npodmi&#x148;uj&#xED; jin&#xE9; p&#x159;&#xED;kazy.</li>\n<li><strong>Odsazen&#xED;</strong> se pou&#x17E;&#xED;v&#xE1; pro podm&#xED;n&#x11B;n&#xE9; p&#x159;&#xED;kazy, kter&#xE9; n&#xE1;sleduj&#xED; po\n<code>if</code> apod..</li>\n</ul>\n\n\n        "
    }
  }
}