Porovnávání věcí

Programátoři často porovnávají různé hodnoty. Pojďme se podívat, jak na to.

>>> 5 > 2
True
>>> 5 > 8
False
>>> 5 < 8
True

Když se Pythonu zeptáš, jestli je jedno číslo větší než druhé, odpoví ti True (pravda) nebo False (nepravda).

Funguje to i se složitějšími výrazy:

>>> 5 > 2 * 2
True

„Větší než“ a „menší než“ jsou značky známé z matematiky. Chceš-li se ale zeptat, jestli jsou dvě čísla stejná, je potřba použít trochu jiný zápis:

>>> 1 == 1
True

Jedno rovnítko = používáme pro přiřazení hodnoty do proměnné. Když chceš zkontrolovat, jestli se věci navzájem rovnají, vždy, vždy musíš dát dvě rovnítka ==.

Další možnosti porovnávání jsou nerovnost (≠), větší nebo rovno (≤) a meší nebo rovno (≥). Většina lidí tyhle symboly nemá na klávesnici, a tak Python používá !=, <= a >=.

>>> 5 != 2
True
>>> 3 <= 2
False
>>> 6 >= 12 / 2
True

Už jsi někdy slyšela výraz „srovnávat jablka a hrušky“? Zkusme v Pythonu ekvivalent:

>>> 1 > 'krajta'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'int' and 'str'

Stejně jako nelze srovnávat „jablka a hrušky“, Python není schopen porovnávat řetězce (str) a čísla (int). Místo toho zobrazí TypeError a říká nám, že tyto dva typy nelze porovnat.

Co se stane, když v minulé ukázce zaměníš > za ==?

Řešení

Logika

Chceš zkusit ještě něco? Zadej tohle:

>>> 6 > 2 and 2 < 3
True
>>> 3 > 2 and 2 < 1
False
>>> 3 > 2 or 2 < 1
True

V Pythonu můžeš zkombinovat několik porovnání do jednoho!

  • Pokud použiješ operátor and, obě strany musí být pravdivé, aby byl celý výraz pravdivý.
  • Pokud použiješ operátor or, stačí aby jen jedna strana z porovnání byla pravdivá.

Přítomnost

Nebylo by pěkné zjistit, jestli tvoje číslo vyhrálo v loterii? K tomu budeš potřebovat zjistit, jestli seznam obsahuje daný prvek. Používá se na to operátor in:

>>> loterie = [3, 42, 12, 19, 30, 59]
>>> 18 in loterie
False
>>> 42 in loterie
True

Není to úplně porovnání, ale dostaneš stejný druh výsledku.

Pravdivostní hodnoty

Právě ses dozvěděla o novém typu objektu v Pythonu. Podobně jako máme řetězec, číslo, seznam nebo slovník existuje pravdivostní hodnota, nebo častěji anglicky boolean.

Může mít jednu z dvou hodnot: True a False.

Aby Python pochopil, že se jedná o tento typ, je potřeba dávat pozor na velikost písmen. true, TRUE, tRUE nebude fungovat – jedině True je správně.

Jako každou hodnotu, i boolean můžeš uložit do proměnné:

>>> a = True
>>> a
True

Stejně tak můžeš uložit i výsledek porovnání:

>>> a = 2 > 5
>>> a
False

Shrnutí

V této sekci ses dozvěděla:

  • V Pythonu můžeš porovnávat pomocí operátorů >, >=, == <=, <, != a in
  • Operátory and a or umí zkombinovat dvě porovnání.
  • Boolean (pravdivostní hodnota) je typ, který může mít jednu ze dvou hodnot: True (pravda) nebo False (nepravda).
{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2018/snake-brno:intro:7",
      "title": "Porovnávání a logika",
      "html": "\n          \n    \n\n    <h1>Porovn&#xE1;v&#xE1;n&#xED; v&#x11B;c&#xED;</h1>\n<p>Program&#xE1;to&#x159;i &#x10D;asto porovn&#xE1;vaj&#xED; r&#x16F;zn&#xE9; hodnoty. Poj&#x10F;me se pod&#xED;vat, jak na to.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">5</span> <span class=\"o\">&gt;</span> <span class=\"mi\">2</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">5</span> <span class=\"o\">&gt;</span> <span class=\"mi\">8</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">5</span> <span class=\"o\">&lt;</span> <span class=\"mi\">8</span>\n<span class=\"go\">True</span>\n</pre></div><p>Kdy&#x17E; se Pythonu zept&#xE1;&#x161;, jestli je jedno &#x10D;&#xED;slo v&#x11B;t&#x161;&#xED; ne&#x17E; druh&#xE9;, odpov&#xED; ti\n<code>True</code> (pravda) nebo <code>False</code> (nepravda).</p>\n<p>Funguje to i se slo&#x17E;it&#x11B;j&#x161;&#xED;mi v&#xFD;razy:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">5</span> <span class=\"o\">&gt;</span> <span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"mi\">2</span>\n<span class=\"go\">True</span>\n</pre></div><p>&#x201E;V&#x11B;t&#x161;&#xED; ne&#x17E;&#x201C; a &#x201E;men&#x161;&#xED; ne&#x17E;&#x201C; jsou zna&#x10D;ky zn&#xE1;m&#xE9; z matematiky.\nChce&#x161;-li se ale zeptat, jestli jsou dv&#x11B; &#x10D;&#xED;sla stejn&#xE1;, je pot&#x159;ba pou&#x17E;&#xED;t\ntrochu jin&#xFD; z&#xE1;pis:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">1</span> <span class=\"o\">==</span> <span class=\"mi\">1</span>\n<span class=\"go\">True</span>\n</pre></div><p>Jedno rovn&#xED;tko <code>=</code> pou&#x17E;&#xED;v&#xE1;me pro <em>p&#x159;i&#x159;azen&#xED;</em> hodnoty do prom&#x11B;nn&#xE9;.\nKdy&#x17E; chce&#x161; zkontrolovat, jestli se v&#x11B;ci navz&#xE1;jem <em>rovnaj&#xED;</em>, v&#x17E;dy, <strong>v&#x17E;dy</strong>\nmus&#xED;&#x161; d&#xE1;t dv&#x11B; rovn&#xED;tka <code>==</code>.</p>\n<p>Dal&#x161;&#xED; mo&#x17E;nosti porovn&#xE1;v&#xE1;n&#xED; jsou nerovnost (&#x2260;), v&#x11B;t&#x161;&#xED; nebo rovno (&#x2264;)\na me&#x161;&#xED; nebo rovno (&#x2265;).\nV&#x11B;t&#x161;ina lid&#xED; tyhle symboly nem&#xE1; na kl&#xE1;vesnici, a tak Python pou&#x17E;&#xED;v&#xE1; <code>!=</code>, <code>&lt;=</code>\na <code>&gt;=</code>.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">5</span> <span class=\"o\">!=</span> <span class=\"mi\">2</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">3</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">2</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">6</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">12</span> <span class=\"o\">/</span> <span class=\"mi\">2</span>\n<span class=\"go\">True</span>\n</pre></div><p>U&#x17E; jsi n&#x11B;kdy sly&#x161;ela v&#xFD;raz &#x201E;srovn&#xE1;vat jablka a hru&#x161;ky&#x201C;? Zkusme v Pythonu ekvivalent:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">1</span> <span class=\"o\">&gt;</span> <span class=\"s1\">&apos;krajta&apos;</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n  File <span class=\"nb\">&quot;&lt;stdin&gt;&quot;</span>, line <span class=\"m\">1</span>, in <span class=\"n\">&lt;module&gt;</span>\n<span class=\"gr\">TypeError</span>: <span class=\"n\">&apos;&gt;&apos; not supported between instances of &apos;int&apos; and &apos;str&apos;</span>\n</pre></div><p>Stejn&#x11B; jako nelze srovn&#xE1;vat &#x201E;jablka a hru&#x161;ky&#x201C;,\nPython nen&#xED; schopen porovn&#xE1;vat &#x159;et&#x11B;zce (<code>str</code>) a &#x10D;&#xED;sla (<code>int</code>).\nM&#xED;sto toho zobraz&#xED; <code>TypeError</code> a &#x159;&#xED;k&#xE1; n&#xE1;m, &#x17E;e tyto dva typy nelze porovnat.</p>\n<p>Co se stane, kdy&#x17E; v&#xA0;minul&#xE9; uk&#xE1;zce zam&#x11B;n&#xED;&#x161; <code>&gt;</code> za <code>==</code>?</p>\n<div class=\"solution\" id=\"solution-0\">\n    <h3>&#x158;e&#x161;en&#xED;</h3>\n    <div class=\"solution-cover\">\n        <a href=\"/2018/snake-brno/fast-track/bool/index/solutions/0/\"><span class=\"link-text\">Uk&#xE1;zat &#x159;e&#x161;en&#xED;</span></a>\n    </div>\n    <div class=\"solution-body\" aria-hidden=\"true\">\n        <div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">1</span> <span class=\"o\">==</span> <span class=\"s1\">&apos;krajta&apos;</span>\n<span class=\"go\">False</span>\n</pre></div><p>Jablka a hru&#x161;ky nem&#x16F;&#x17E;e&#x161; porovn&#xE1;vat, ale m&#x16F;&#x17E;e&#x161; si potvrdit &#x17E;e jsou to dv&#x11B; r&#x16F;zn&#xE9;\nv&#x11B;ci.</p>\n    </div>\n</div><h2>Logika</h2>\n<p>Chce&#x161; zkusit je&#x161;t&#x11B; n&#x11B;co? Zadej tohle:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">6</span> <span class=\"o\">&gt;</span> <span class=\"mi\">2</span> <span class=\"ow\">and</span> <span class=\"mi\">2</span> <span class=\"o\">&lt;</span> <span class=\"mi\">3</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">3</span> <span class=\"o\">&gt;</span> <span class=\"mi\">2</span> <span class=\"ow\">and</span> <span class=\"mi\">2</span> <span class=\"o\">&lt;</span> <span class=\"mi\">1</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">3</span> <span class=\"o\">&gt;</span> <span class=\"mi\">2</span> <span class=\"ow\">or</span> <span class=\"mi\">2</span> <span class=\"o\">&lt;</span> <span class=\"mi\">1</span>\n<span class=\"go\">True</span>\n</pre></div><p>V&#xA0;Pythonu m&#x16F;&#x17E;e&#x161; zkombinovat n&#x11B;kolik porovn&#xE1;n&#xED; do jednoho!</p>\n<ul>\n<li>Pokud pou&#x17E;ije&#x161; oper&#xE1;tor <code>and</code>, ob&#x11B; strany mus&#xED; b&#xFD;t pravdiv&#xE9;, aby byl cel&#xFD; v&#xFD;raz pravdiv&#xFD;.</li>\n<li>Pokud pou&#x17E;ije&#x161; oper&#xE1;tor <code>or</code>, sta&#x10D;&#xED; aby jen jedna strana z porovn&#xE1;n&#xED; byla pravdiv&#xE1;.</li>\n</ul>\n<h2>P&#x159;&#xED;tomnost</h2>\n<p>Nebylo by p&#x11B;kn&#xE9; zjistit, jestli tvoje &#x10D;&#xED;slo vyhr&#xE1;lo v&#xA0;loterii?\nK&#xA0;tomu bude&#x161; pot&#x159;ebovat zjistit, jestli seznam obsahuje dan&#xFD; prvek.\nPou&#x17E;&#xED;v&#xE1; se na to oper&#xE1;tor <code>in</code>:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">loterie</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">42</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">19</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">59</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">18</span> <span class=\"ow\">in</span> <span class=\"n\">loterie</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">42</span> <span class=\"ow\">in</span> <span class=\"n\">loterie</span>\n<span class=\"go\">True</span>\n</pre></div><p>Nen&#xED; to &#xFA;pln&#x11B; porovn&#xE1;n&#xED;, ale dostane&#x161; stejn&#xFD; druh v&#xFD;sledku.</p>\n<h2>Pravdivostn&#xED; hodnoty</h2>\n<p>Pr&#xE1;v&#x11B; ses dozv&#x11B;d&#x11B;la o nov&#xE9;m typu objektu v Pythonu.\nPodobn&#x11B; jako m&#xE1;me &#x159;et&#x11B;zec, &#x10D;&#xED;slo, seznam nebo slovn&#xED;k existuje\n<em>pravdivostn&#xED; hodnota</em>, nebo &#x10D;ast&#x11B;ji anglicky <em>boolean</em>.</p>\n<p>M&#x16F;&#x17E;e m&#xED;t jednu z dvou hodnot: <code>True</code> a <code>False</code>.</p>\n<p>Aby Python pochopil, &#x17E;e se jedn&#xE1; o tento typ,\nje pot&#x159;eba d&#xE1;vat pozor na velikost p&#xED;smen.\n<code>true</code>, <code>TRUE</code>, <code>tRUE</code> nebude fungovat &#x2013; jedin&#x11B; <code>True</code> je spr&#xE1;vn&#x11B;.</p>\n<p>Jako ka&#x17E;dou hodnotu, i <em>boolean</em> m&#x16F;&#x17E;e&#x161; ulo&#x17E;it do prom&#x11B;nn&#xE9;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"bp\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a</span>\n<span class=\"go\">True</span>\n</pre></div><p>Stejn&#x11B; tak m&#x16F;&#x17E;e&#x161; ulo&#x17E;it i v&#xFD;sledek porovn&#xE1;n&#xED;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"mi\">2</span> <span class=\"o\">&gt;</span> <span class=\"mi\">5</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a</span>\n<span class=\"go\">False</span>\n</pre></div><h2>Shrnut&#xED;</h2>\n<p>V&#xA0;t&#xE9;to sekci ses dozv&#x11B;d&#x11B;la:</p>\n<ul>\n<li>V&#xA0;Pythonu m&#x16F;&#x17E;e&#x161; <strong>porovn&#xE1;vat</strong> pomoc&#xED; oper&#xE1;tor&#x16F; <code>&gt;</code>, <code>&gt;=</code>, <code>==</code> <code>&lt;=</code>, <code>&lt;</code>, <code>!=</code> a <code>in</code></li>\n<li>Oper&#xE1;tory <code>and</code> a <code>or</code> um&#xED; <strong>zkombinovat</strong> dv&#x11B; porovn&#xE1;n&#xED;.</li>\n<li><strong>Boolean</strong> (pravdivostn&#xED; hodnota) je typ, kter&#xFD; m&#x16F;&#x17E;e m&#xED;t jednu ze dvou\nhodnot: <code>True</code> (pravda) nebo <code>False</code> (nepravda).</li>\n</ul>\n\n\n        "
    }
  }
}