Náhoda

Občas je potřeba vybrat náhodnou hodnotu. Na to není v Pythonu funkce k dispozici přímo, ale dá se zpřístupnit pomocí příkazu import:

>>> from random import randrange
>>> randrange(6)
3

Neboli:

  • Z modulu random (který obsahuje funkce kolem náhodných hodnot) zpřístupni funkci randrange (která umí vybírat náhodná čísla).
  • Vyber náhodné číslo ze šesti možností.

Volání funkce randrange několikrát opakuj. Jaká čísla můžeš dostat?

Řešení

Modulů jako random, ze kterých se dají naimportovat užitečná rozšiření, je spousta – na práci s textem, kreslení obrázků, práci se soubory nebo dny v kalendáři, kompresi dat, posílání e-mailů, stahování z internetu… Stačí jen vědět (nebo umět najít), jak se ten správný modul a funkce jmenuje. A kdyby nestačilo to, co má Python zabudované v sobě, další rozšiřující moduly se dají doinstalovat.

Náhodný výběr

Když už jsme u náhody, zkusme si ještě vylosovat náhodné číslo v loterii. Na výběr ze seznamu má modul random funkci choice:

>>> from random import choice
>>> loterie = [3, 42, 12, 19, 30, 59]
>>> choice(loterie)
12

Podobně se dá vybrat náhodná karta z ruky, náhodný účastník kurzu, náhodná barva – cokoli, co umíš dát do seznamu.

Shrnutí

  • Příkaz import ti dá k dispozici funkčnost, která není k dispozici přímo v Pythonu.
  • Modul random obsahuje funkce randrange (náhodné číslo) a choice (náhodný prvek seznamu).
{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2019/brno-podzim-snake:intro:6",
      "title": "NĂ¡hoda",
      "html": "\n          \n    \n\n    <h1>N&#xE1;hoda</h1>\n<p>Ob&#x10D;as je pot&#x159;eba vybrat n&#xE1;hodnou hodnotu.\nNa to nen&#xED; v&#xA0;Pythonu funkce k&#xA0;dispozici p&#x159;&#xED;mo, ale d&#xE1; se zp&#x159;&#xED;stupnit\npomoc&#xED; p&#x159;&#xED;kazu <code>import</code>:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">random</span> <span class=\"kn\">import</span> <span class=\"n\">randrange</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">randrange</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">)</span>\n<span class=\"go\">3</span>\n</pre></div><p>Neboli:</p>\n<ul>\n<li>Z&#xA0;modulu <code>random</code> (kter&#xFD; obsahuje funkce kolem n&#xE1;hodn&#xFD;ch hodnot)\nzp&#x159;&#xED;stupni funkci <code>randrange</code> (kter&#xE1; um&#xED; vyb&#xED;rat n&#xE1;hodn&#xE1; &#x10D;&#xED;sla).</li>\n<li>Vyber n&#xE1;hodn&#xE9; &#x10D;&#xED;slo ze &#x161;esti mo&#x17E;nost&#xED;.</li>\n</ul>\n<p>Vol&#xE1;n&#xED; funkce <code>randrange</code> n&#x11B;kolikr&#xE1;t opakuj.\nJak&#xE1; &#x10D;&#xED;sla m&#x16F;&#x17E;e&#x161; dostat?</p>\n<div class=\"solution\" id=\"solution-0\">\n    <h3>&#x158;e&#x161;en&#xED;</h3>\n    <div class=\"solution-cover\">\n        <a href=\"/2019/brno-podzim-snake/fast-track/random/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        <p>&#x10C;&#xED;sla od 0 do 5 &#x2013; &#x161;estku ne.\nProgram&#xE1;to&#x159;i toti&#x17E; po&#x10D;&#xED;taj&#xED; od nuly, a kdy&#x17E; po&#x10D;&#xED;t&#xE1;&#x161; od nuly a chce&#x161; &#x161;est &#x10D;&#xED;sel, dostane&#x161; se jen k p&#x11B;tce.</p>\n<p>M&#x16F;&#x17E;e&#x161; ale napsat:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">random</span> <span class=\"kn\">import</span> <span class=\"n\">randrange</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;Na kostce padlo&apos;</span><span class=\"p\">,</span> <span class=\"n\">randrange</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">4</span>\n</pre></div>\n    </div>\n</div><p>Modul&#x16F; jako <code>random</code>, ze kter&#xFD;ch se daj&#xED; <em>naimportovat</em> u&#x17E;ite&#x10D;n&#xE1; roz&#x161;i&#x159;en&#xED;,\nje spousta &#x2013; na pr&#xE1;ci s textem, kreslen&#xED; obr&#xE1;zk&#x16F;, pr&#xE1;ci se soubory nebo dny\nv&#xA0;kalend&#xE1;&#x159;i, kompresi dat, pos&#xED;l&#xE1;n&#xED; e-mail&#x16F;, stahov&#xE1;n&#xED; z&#xA0;internetu&#x2026;\nSta&#x10D;&#xED; jen v&#x11B;d&#x11B;t (nebo um&#x11B;t naj&#xED;t), jak se ten spr&#xE1;vn&#xFD; modul a funkce jmenuje.\nA kdyby nesta&#x10D;ilo to, co m&#xE1; Python zabudovan&#xE9; v sob&#x11B;, dal&#x161;&#xED; roz&#x161;i&#x159;uj&#xED;c&#xED; moduly\nse daj&#xED; doinstalovat.</p>\n<h2>N&#xE1;hodn&#xFD; v&#xFD;b&#x11B;r</h2>\n<p>Kdy&#x17E; u&#x17E; jsme u n&#xE1;hody, zkusme si je&#x161;t&#x11B; vylosovat n&#xE1;hodn&#xE9; &#x10D;&#xED;slo v&#xA0;loterii.\nNa v&#xFD;b&#x11B;r ze seznamu m&#xE1; modul <code>random</code> funkci <code>choice</code>:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">random</span> <span class=\"kn\">import</span> <span class=\"n\">choice</span>\n<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=\"n\">choice</span><span class=\"p\">(</span><span class=\"n\">loterie</span><span class=\"p\">)</span>\n<span class=\"go\">12</span>\n</pre></div><p>Podobn&#x11B; se d&#xE1; vybrat n&#xE1;hodn&#xE1; karta z ruky, n&#xE1;hodn&#xFD; &#xFA;&#x10D;astn&#xED;k kurzu,\nn&#xE1;hodn&#xE1; barva &#x2013; cokoli, co um&#xED;&#x161; d&#xE1;t do seznamu.</p>\n<h2>Shrnut&#xED;</h2>\n<ul>\n<li>P&#x159;&#xED;kaz <strong>import</strong> ti d&#xE1; k&#xA0;dispozici funk&#x10D;nost, kter&#xE1; nen&#xED; k&#xA0;dispozici p&#x159;&#xED;mo\nv&#xA0;Pythonu.</li>\n<li>Modul <strong>random</strong> obsahuje funkce <strong>randrange</strong> (n&#xE1;hodn&#xE9; &#x10D;&#xED;slo) a <strong>choice</strong>\n(n&#xE1;hodn&#xFD; prvek seznamu).</li>\n</ul>\n\n\n        "
    }
  }
}