IB111 – cv. 4 Náhodná čísla Miroslav Kadlec Obsah ● Importování modulů ● Pseudonáhodná čísla v počítači ● Modul "random" ● Příklady ● N-stěnná kostka ● Analýza mnoha hodů kostkou ● Opilec na cestě domů Import modulů ● Existuje více možností, jak importovat funkce do skriptu ● Importování konkrétní funkce/hodnoty z modulu – "from math import sqrt" – V kódu používáme jen název importované funkce "funkce(...)" ● Importování všeho z modulu – "from math import *" – Volání stejné jako při importu konkrétní funkce ● Importování celého modulu – "import math" – Používáme volání "modul.funkce(...)" Náhodná čísla v počítači ● Ve skutečnosti jde o pseudonáhodná čísla ● Počítače jsou ve své podstatě deterministické, pro daný vstup se chovají vždy stejně – Součástka pro generování náhodných čísel by musela být založená na nějakém náhodném fyzikálním jevu (radioaktivní rozpad, průchod fotonů polopropustným zrcadlem) ● Pseudonáhodné číslo je výsledek deterministického výpočtu, ale při větším počtu opakování vykazují některé náhodnostní rysy – Vstupem výpočtu je tzv. "seed" Modul random ● Funkce "random()" ● Generuje číslo <0, 1) ● Funkce "randint(x, y)" ● Generuje celé číslo z intervalu ● Pozor na horní hranici (je rozdíl mezi range a randint) ● Funkce "seed()" ● Umožňuje inicializovat vstup generátoru pseudonáhodných čísel Příklad: N-stěnná kostka + statistika ● Def dice(x): ● Vrátí náhodné číslo, které by padlo při hodu kostkou o X stěnách ● Def dice_freq(count, x) ● Hází opakovaně kostkou o X stěnách (počet opakování definován parametrem "count") ● Vypisuje jednotlivé hody ● Nakonec vypíše nejmenší, největší a průměrnou hodnotu hodu ● Chová se kostka pro velké počty opakování správně? Příklad: Opilec ● Zadání ve sbírce ● def drunkman_simulator(size, steps): ● Pro jaké délky cesty má cenu simulaci provádět ● Jak reprezentovat aktuální pozici na cestě? ● Musíme hlídat, jestli už opilec nedošel na některý konec ● Dekompozice: – Textový výpis cesty do zvláštní funkce ● Co potřebujeme znát pro vykreslení cesty v každém kole? – Výpočet nové pozice opilce taky může (ale nemusí) být ve zvláštní funkci