Náhoda

Niekedy chceš veciam dopriať voľnejší priebeh alebo niečo trochu pomiešať: chceš, aby sa zariadenie správalo náhodne.

MicroPython obsahuje modul random („náhoda“), vďaka ktorému vniesť trochu chaosu do tvojho kódu, je veľmi jednoduché. Napríklad takto urobíš, aby sa na displeji posúvalo náhodne vybrané meno:

from microbit import *
import random

names = ["Mary", "Yolanda", "Damien", "Alia", "Kushal", "Mei Xiu", "Zoltan" ]

display.scroll(random.choice(names))

Zoznam (names - „mená“) obsahuje sedem mien, ktoré sú definované ako reťazce znakov. Posledný riadok je vnorený („cibuľový“ efekt, o ktorom sme hovorili v predchádzajúcich kapitolách): metóda random.choice („náhoda.výber“) prijme zoznam names ako argument ako vráti z neho náhodne položku. Táto položka (náhodne vybrané meno) je potom argumentom pre metódu display.scroll („displej.posúvaj“).

Dokážeš upraviť zoznam tak, aby obsahoval tvoj vlastný zoznam mien?

Náhodné čísla

Náhodné čísla sú veľmi užitočné. V hrách sú veľmi bežné. Prečo by sme inak mali kocky?

MicroPython obsahuje niekoľko užitočných metód na náhodné čísla. Takto jednoducho môžeme hádzať kockou:

from microbit import *
import random

display.show(str(random.randint(1, 6)))

Zakaždým, keď zariadenie resetuješ, zobrazí číslo medzi 1 a 6. Myslím, že už rozumieš vnoreniu, takže je dobré si všimnúť, že random.randint vracia celé číslo medzi dvoma argumentami, vrátane (celé číslo sa v Pythone volá integer, preto má metóda také meno). Pretože display.show očakáva ako argument znak, musíme použiť funkciu str, ktorou premeníme číslo na znak (napríklad zmeníme 6 na "6").

Ak vieš, že budeš potrebovať vždy číslo medzi 0 a N, môžeš použiť metódu random.randrange. Ak jej zadáš iba jeden argument, vráti náhodné číslo do hodnoty N (ale nie vrátane tohto čísla). Tým sa líši od správania sa metódy random.randint).

Niekedy potrebuješ čísla aj s desatinnou čiarkou. Voláme ich reálne čísla (angl. floating point numbers) a môžeme ich generovať pomocou metódy random.random. Táto vracia hodnotu medzi 0.0 a 1.0 vrátane krajných hodnôt. Ak potrebuješ väčšie náhodné reálne číslo, pridaj takto výsledky metód random.randrange a random.random:

from microbit import *
import random

answer = random.randrange(100) + random.random()
display.scroll(str(answer))

Počiatok chaosu

Generátory náhodných čísel, ktoré sa využívajú v počítačoch nie sú v skutočnosti úplne náhodné. Poskytujú akoby náhodné číslo, ktoré sa vypočíta z počiatočnej hodnoty. Počiatočná hodnota (seed) je často generovaná z kvázi-náhodných hodnôt ako napríklad aktuálny čas a/alebo hodnoty odčítané z rôznych senzorov, ako je napríklad v čipe vstavaný teplomer.

Niekedy potrebuješ opakovateľné kvázi-náhodné správanie: zdroja náhody, ktorý je reprodukovateľný. Napríklad, ak potrebuješ, aby pri každom hode kockami padlo 5 rovnakých náhodných čísel..

Toto zabezpečíš jednoducho pomocou nastavenej počiatočnej hodnoty. Ak zadáme známu počiatočnú hodnotu - seed, generátor náhodných čísel vytvorí rovnaký set náhodných čísel. Počiatočná hodnota sa nastavuje pomocou random.seed a akéhokovek celého čísla. Takáto verzia programu na hádzanie kockou bude dávať vždy rovnaký výsledok:

from microbit import *
import random

random.seed(1337)
while True:
    if button_a.was_pressed():
        display.show(str(random.randint(1, 6)))

Vieš prečo tento program potrebuje, aby sme stlačili tlačítko A namiesto resetu zariadenia, ako to bolo v prvom príklade s kockami..?