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 2 < 3 and 5 < 3 |
„a zároveň“ |
or |
True or False 2 < 3 or 5 < 3 |
„a nebo“ |
not |
not False not 5 < 3
| „ne“ |
Například, chceš-li zjistit, jestli je kterékoli z dvou čísel záporné, můžeš napsat:
a = float(input("Zadej první stranu obdélníka: ")
b = float(input("Zadej druhou stranu obdélníka: ")
if a <= 0 or b <= 0:
print("Délka nemůže být záporná!")
Falešní kamarádi
Pozor na to, že and
a or
nejsou anglická slovíčka, ale operátory,
které spojují logické výrazy.
Na obě strany and
i or
patří výraz, jehož hodnota je True
/False
(například porovnání).
if a <= 0 or b <= 0:
Může se zdát, že by se to dalo zkrátit a napsat if a or b <= 0:
– „pokud
je A nebo B menší než 0“.
Ale to si Python přeloží na:
if (a) or (b <= 0):
... tedy „pokud platí A, a nebo je B menší než 0“. A to moc smyslu nedává. (Kdy „platí“ celé číslo?)
Pro příklad použijeme and
ve vylepšeném programu, který rozdává nejapné rady
do života.
Zkus si ho projít a okomentovat části, které nejsou na první pohled jasné.
# Tento program rozdává nejapné rady do života.
print('Odpovídej "ano" nebo "ne".')
stastna_retezec = input('Jsi šťastná? ')
if stastna_retezec == 'ano' or stastna_retezec == 'Ano':
stastna = True
elif stastna_retezec == 'ne' or stastna_retezec == 'Ne':
stastna = False
else:
print('Nerozumím!')
bohata_retezec = input('Jsi bohatá? ')
if bohata_retezec == 'ano' or bohata_retezec == 'Ano':
bohata = True
elif bohata_retezec == 'ne' or 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/czechitas-ostrava-jaro:loops:1", "title": "*Nebo* anebo *a* (bonus)", "html": "\n \n \n\n <h1><em>Nebo</em> anebo <em>a</em></h1>\n<p>Vzpomínáš na tabulku operátorů\nz <a href=\"/2018/czechitas-ostrava-jaro/beginners/comparisons/\">lekce o Porovnávání</a>?\nNyní si ji doplníme o další tři operátory,\nkteré se hodí do podmínek:</p>\n<table class=\"table\">\n <tbody><tr>\n <th>Symbol</th>\n <th>Příklad</th>\n <th>Popis</th>\n </tr>\n <tr>\n <td><code>and</code></td>\n <td><code>True and False</code><br><code>2 < 3 and 5 < 3</code></td>\n <td>„a zároveň“</td>\n </tr>\n <tr>\n <td><code>or</code></td>\n <td><code>True or False</code><br><code>2 < 3 or 5 < 3</code></td>\n <td>„a nebo“</td>\n </tr>\n <tr>\n <td><code>not</code></td>\n <td><code>not False</code><br><code>not 5 < 3</code>\n </td><td>„ne“</td>\n </tr>\n</tbody></table><p>Například, chceš-li zjistit, jestli je kterékoli z dvou čísel záporné,\nmůžeš napsat:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s2\">"Zadej první stranu obdélníka: "</span><span class=\"p\">)</span>\n<span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s2\">"Zadej druhou stranu obdélníka: "</span><span class=\"p\">)</span>\n\n<span class=\"k\">if</span> <span class=\"n\">a</span> <span class=\"o\"><=</span> <span class=\"mi\">0</span> <span class=\"ow\">or</span> <span class=\"n\">b</span> <span class=\"o\"><=</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s2\">"Délka nemůže být záporná!"</span><span class=\"p\">)</span>\n</pre></div><div class=\"admonition warning\"><p class=\"admonition-title\">Falešní kamarádi</p>\n<p>Pozor na to, že <code>and</code> a <code>or</code> nejsou anglická slovíčka, ale operátory,\nkteré spojují logické výrazy.\nNa <em>obě</em> strany <code>and</code> i <code>or</code> patří výraz, jehož hodnota je <code>True</code>/<code>False</code>\n(například porovnání).</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">if</span> <span class=\"n\">a</span> <span class=\"o\"><=</span> <span class=\"mi\">0</span> <span class=\"ow\">or</span> <span class=\"n\">b</span> <span class=\"o\"><=</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n</pre></div><p>Může se zdát, že by se to dalo zkrátit a napsat <code>if a or b <= 0:</code> – „pokud\nje A nebo B menší než 0“.\nAle to si Python přeloží na:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"p\">(</span><span class=\"n\">b</span> <span class=\"o\"><=</span> <span class=\"mi\">0</span><span class=\"p\">):</span>\n</pre></div><p>... tedy „pokud platí A, a nebo je B menší než 0“.\nA to moc smyslu nedává.\n(Kdy „platí“ celé číslo?)</p>\n</div><h2>Šťastná/Bohatá</h2>\n<p>Pro příklad použijeme <code>and</code> ve vylepšeném programu, který rozdává nejapné rady\ndo života.\nZkus si ho projít a okomentovat části, které nejsou na první pohled jasné.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"c1\"># Tento program rozdává nejapné rady do života.</span>\n\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Odpovídej "ano" nebo "ne".'</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\">'Jsi šťastná? '</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> <span class=\"n\">stastna_retezec</span> <span class=\"o\">==</span> <span class=\"s1\">'ano'</span> <span class=\"ow\">or</span> <span class=\"n\">stastna_retezec</span> <span class=\"o\">==</span> <span class=\"s1\">'Ano'</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\">'ne'</span> <span class=\"ow\">or</span> <span class=\"n\">stastna_retezec</span> <span class=\"o\">==</span> <span class=\"s1\">'Ne'</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\">'Nerozumím!'</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\">'Jsi bohatá? '</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> <span class=\"n\">bohata_retezec</span> <span class=\"o\">==</span> <span class=\"s1\">'ano'</span> <span class=\"ow\">or</span> <span class=\"n\">bohata_retezec</span> <span class=\"o\">==</span> <span class=\"s1\">'Ano'</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\">'ne'</span> <span class=\"ow\">or</span> <span class=\"n\">bohata_retezec</span> <span class=\"o\">==</span> <span class=\"s1\">'Ne'</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\">'Nerozumím!'</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á a zároveň štǎstná, ta se má.</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Gratuluji!'</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á, ale není „bohatá a zároveň šťastná“,</span>\n <span class=\"c1\"># takže musí být jen bohatá.</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Zkus se víc usmívat.'</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í být jen šťastná.</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Zkus míň utrácet.'</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n <span class=\"c1\"># A tady víme, že není ani šťastná, ani bohatá.</span>\n <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'To je mi líto.'</span><span class=\"p\">)</span>\n</pre></div><div class=\"admonition note\"><p>Všimni si co se stane, když zadáš něco jiného než „ano“ nebo „ne“.</p>\n<p>Proměnná <code>stastna</code> nebo <code>bohata</code> se nenastaví, a když je ji potom\npotřeba použít, program skončí s chybou.</p>\n<p>O tom, jak se vypořádat s chybami, si povíme <a href=\"/2018/czechitas-ostrava-jaro/beginners/exceptions/\">později</a>.</p>\n</div>\n\n\n " } } }