random — generování náhodných čísel

Tento modul implementuje generátor pseudonáhodných čísel (PRNG). PRNG je 32bitový LCG ve stylu Yasmarang; při prvním importu načte jeden 32bitový seed ze stejného hardwarového zdroje, který používá os.urandom(), a každé následující číslo je deterministickou funkcí tohoto seedu.

Varování

Výstup není kryptograficky bezpečný – algoritmus je předvídatelný z krátké výstupní sekvence a počáteční seed nese pouze 32 bitů entropie. Pro klíčovací materiál, relační tokeny, soli hesel nebo jakékoli jiné bezpečnostně citlivé použití volejte místo toho os.urandom().

Poznámka

Pro intervaly se používá následující notace:

  • () jsou závorky otevřeného intervalu a nezahrnují své krajní body. Například (0, 1) znamená větší než 0 a menší než 1. V množinové notaci: (0, 1) = {x | 0 < x < 1}.

  • [] jsou závorky uzavřeného intervalu, které zahrnují všechny své limitní body. Například [0, 1] znamená větší nebo rovno 0 a menší nebo rovno 1. V množinové notaci: [0, 1] = {x | 0 <= x <= 1}.

Funkce pro celá čísla

random.getrandbits(n: int) int

Vrací celé číslo s n náhodnými bity (0 <= n <= 32).

random.randint(a: int, b: int) int

Vrací náhodné celé číslo v rozsahu [a, b].

random.randrange(start: int, stop: int | None = None, step: int = 1) int

První tvar vrací náhodné celé číslo z rozsahu [0, stop). Druhý tvar vrací náhodné celé číslo z rozsahu [start, stop). Třetí tvar vrací náhodné celé číslo z rozsahu [start, stop) v krocích po step. Například volání randrange(1, 10, 2) vrátí lichá čísla mezi 1 a 9 včetně.

Funkce pro čísla s plovoucí desetinnou čárkou

random.random() float

Vrací náhodné číslo s plovoucí desetinnou čárkou v rozsahu [0.0, 1.0).

random.uniform(a: float, b: float) float

Vrací náhodné číslo s plovoucí desetinnou čárkou N takové, že a <= N <= b pro a <= b, a b <= N <= a pro b < a.

Ostatní funkce

random.seed(n: int | None = None, /) None

Inicializuje modul generátoru náhodných čísel seedem n, který by měl být celé číslo. Pokud není předán žádný argument (nebo None), je PRNG znovu naočkován ze stejného zdroje specifického pro daný port, který používá os.urandom().

random.choice(sequence: Any) Any

Vybere a vrátí jednu položku náhodně ze sequence (n-tice, seznam nebo jakýkoli objekt, který podporuje operaci indexování).