Nebo anebo a

Vzpomínáš na tabulku operátorů z lekce o Porovnávání? Nyní si ji doplníme o další tři operátory, které se hodí do podmínek:

Symbol Příklad Popis
and True and False „a zároveň“
or True or False „a nebo“
not not False „ne“

Pro příklad použijeme and v tomto programu. Zkus si ho projít a okomentovat části, které nejsou na první pohled jasné.

# Tento program rozdává naivní rady do života.

print('Odpovídej "ano" nebo "ne".')
stastna_retezec = input('Jsi šťastná? ')
if stastna_retezec == 'ano':
    stastna = True
elif stastna_retezec == 'ne':
    stastna = False
else:
    print('Nerozumím!')

bohata_retezec = input('Jsi bohatá? ')
if bohata_retezec == 'ano':
    bohata = True
elif bohata_retezec == 'ne':
    bohata = False
else:
    print('Nerozumím!')

if bohata and stastna:
    # Je bohatá a zároveň štǎstná, ta se má.
    print('Gratuluji!')
elif bohata:
    # Je bohatá, ale není „bohatá a zároveň šťastná“,
    # takže musí být jen bohatá.
    print('Zkus se víc usmívat.')
elif stastna:
    # Tady musí být jen šťastná.
    print('Zkus míň utrácet.')
else:
    # A tady víme, že není ani šťastná, ani bohatá.
    print('To je mi líto.')

Všimni si co se stane, když zadáš něco jiného než „ano“ nebo „ne“.

Proměnná stastna nebo bohata se nenastaví, a když je ji potom potřeba použít, program skončí s chybou.

O tom, jak se vypořádat s chybami, si povíme později.

{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2018/pyladies-brno-jaro:hello:5",
      "title": "*Nebo* anebo *a* (bonus)",
      "html": "\n          \n    \n\n    <h1><em>Nebo</em> anebo <em>a</em></h1>\n<p>Vzpom&#xED;n&#xE1;&#x161; na tabulku oper&#xE1;tor&#x16F;\nz&#xA0;<a href=\"/2018/pyladies-brno-jaro/beginners/comparisons/\">lekce o Porovn&#xE1;v&#xE1;n&#xED;</a>?\nNyn&#xED; si ji dopln&#xED;me o dal&#x161;&#xED; t&#x159;i oper&#xE1;tory,\nkter&#xE9; se hod&#xED; do podm&#xED;nek:</p>\n<table class=\"table\">\n    <tbody><tr>\n        <th>Symbol</th>\n        <th>P&#x159;&#xED;klad</th>\n        <th>Popis</th>\n    </tr>\n    <tr>\n        <td><code>and</code></td>\n        <td><code>True and False</code></td>\n        <td>&#x201E;a z&#xE1;rove&#x148;&#x201C;</td>\n    </tr>\n    <tr>\n        <td><code>or</code></td>\n        <td><code>True or False</code></td>\n        <td>&#x201E;a nebo&#x201C;</td>\n    </tr>\n    <tr>\n        <td><code>not</code></td>\n        <td><code>not False</code></td>\n        <td>&#x201E;ne&#x201C;</td>\n    </tr>\n</tbody></table><p>Pro p&#x159;&#xED;klad pou&#x17E;ijeme <code>and</code> v tomto programu.\nZkus si ho proj&#xED;t a okomentovat &#x10D;&#xE1;sti, kter&#xE9; nejsou na prvn&#xED; pohled jasn&#xE9;.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"c1\"># Tento program rozd&#xE1;v&#xE1; naivn&#xED; rady do &#x17E;ivota.</span>\n\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;Odpov&#xED;dej &quot;ano&quot; nebo &quot;ne&quot;.&apos;</span><span class=\"p\">)</span>\n<span class=\"n\">stastna_retezec</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&apos;Jsi &#x161;&#x165;astn&#xE1;? &apos;</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> <span class=\"n\">stastna_retezec</span> <span class=\"o\">==</span> <span class=\"s1\">&apos;ano&apos;</span><span class=\"p\">:</span>\n    <span class=\"n\">stastna</span> <span class=\"o\">=</span> <span class=\"bp\">True</span>\n<span class=\"k\">elif</span> <span class=\"n\">stastna_retezec</span> <span class=\"o\">==</span> <span class=\"s1\">&apos;ne&apos;</span><span class=\"p\">:</span>\n    <span class=\"n\">stastna</span> <span class=\"o\">=</span> <span class=\"bp\">False</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;Nerozum&#xED;m!&apos;</span><span class=\"p\">)</span>\n\n<span class=\"n\">bohata_retezec</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&apos;Jsi bohat&#xE1;? &apos;</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> <span class=\"n\">bohata_retezec</span> <span class=\"o\">==</span> <span class=\"s1\">&apos;ano&apos;</span><span class=\"p\">:</span>\n    <span class=\"n\">bohata</span> <span class=\"o\">=</span> <span class=\"bp\">True</span>\n<span class=\"k\">elif</span> <span class=\"n\">bohata_retezec</span> <span class=\"o\">==</span> <span class=\"s1\">&apos;ne&apos;</span><span class=\"p\">:</span>\n    <span class=\"n\">bohata</span> <span class=\"o\">=</span> <span class=\"bp\">False</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;Nerozum&#xED;m!&apos;</span><span class=\"p\">)</span>\n\n<span class=\"k\">if</span> <span class=\"n\">bohata</span> <span class=\"ow\">and</span> <span class=\"n\">stastna</span><span class=\"p\">:</span>\n    <span class=\"c1\"># Je bohat&#xE1; a z&#xE1;rove&#x148; &#x161;t&#x1CE;stn&#xE1;, ta se m&#xE1;.</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;Gratuluji!&apos;</span><span class=\"p\">)</span>\n<span class=\"k\">elif</span> <span class=\"n\">bohata</span><span class=\"p\">:</span>\n    <span class=\"c1\"># Je bohat&#xE1;, ale nen&#xED; &#x201E;bohat&#xE1; a z&#xE1;rove&#x148; &#x161;&#x165;astn&#xE1;&#x201C;,</span>\n    <span class=\"c1\"># tak&#x17E;e mus&#xED; b&#xFD;t jen bohat&#xE1;.</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;Zkus se v&#xED;c usm&#xED;vat.&apos;</span><span class=\"p\">)</span>\n<span class=\"k\">elif</span> <span class=\"n\">stastna</span><span class=\"p\">:</span>\n    <span class=\"c1\"># Tady mus&#xED; b&#xFD;t jen &#x161;&#x165;astn&#xE1;.</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;Zkus m&#xED;&#x148; utr&#xE1;cet.&apos;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"c1\"># A tady v&#xED;me, &#x17E;e nen&#xED; ani &#x161;&#x165;astn&#xE1;, ani bohat&#xE1;.</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;To je mi l&#xED;to.&apos;</span><span class=\"p\">)</span>\n</pre></div><div class=\"admonition note\"><p>V&#x161;imni si co se stane, kdy&#x17E; zad&#xE1;&#x161; n&#x11B;co jin&#xE9;ho ne&#x17E; &#x201E;ano&#x201C; nebo &#x201E;ne&#x201C;.</p>\n<p>Prom&#x11B;nn&#xE1; <code>stastna</code> nebo <code>bohata</code> se nenastav&#xED;, a kdy&#x17E; je ji potom\npot&#x159;eba pou&#x17E;&#xED;t, program skon&#x10D;&#xED; s chybou.</p>\n<p>O tom, jak se vypo&#x159;&#xE1;dat s&#xA0;chybami, si pov&#xED;me <a href=\"/2018/pyladies-brno-jaro/beginners/exceptions/\">pozd&#x11B;ji</a>.</p>\n</div>\n\n\n        "
    }
  }
}