Náhodná čísla lze generovat pomocí funkcí random(), uniform(), randange() a randint() v modulu random standardní knihovny jazyka Python.
Modul random je součástí standardní knihovny, takže není nutná žádná další instalace. Je ovšem nutné jej importovat.
Zde jsou uvedeny následující informace.
random.random()
(Číslo s pohyblivou řádovou čárkou mezi 0,0 a 1,0)random.uniform()
(Jakýkoli rozsah čísel s plovoucí desetinnou čárkou)- Generování náhodných čísel, která se řídí normálním rozdělením, Gaussovým rozdělením atd.
random.randrange()
(Celé číslo libovolného rozsahu a kroku)random.randint()
(Celé číslo v libovolném rozsahu)- Generování seznamu s náhodnými čísly jako prvky
- Seznam náhodných čísel s pohyblivou řádovou čárkou
- Seznam celých náhodných čísel
- Inicializace generátoru náhodných čísel (stanovení semínka náhodných čísel)
V následujícím článku se dozvíte, jak náhodně vybírat nebo třídit prvky seznamu.
- Související články:Výběr náhodných prvků ze seznamu v jazyce Python pomocí funkce choice(), sample(), choices()
- random.random() (Číslo s pohyblivou řádovou čárkou mezi 0,0 a 1,0)
- random.uniform() (Jakýkoli rozsah čísel s plovoucí desetinnou čárkou)
- Generování náhodných čísel, která se řídí normálním rozdělením, Gaussovým rozdělením atd.
- random.randrange() (Celé číslo libovolného rozsahu a kroku)
- random.randint() (Celé číslo v libovolném rozsahu)
- Generování seznamu s náhodnými čísly jako prvky
- Inicializace generátoru náhodných čísel (stanovení semínka náhodných čísel)
random.random() (Číslo s pohyblivou řádovou čárkou mezi 0,0 a 1,0)
Funkce random() modulu random vygeneruje náhodné číslo s pohyblivou řádovou čárkou typu float, které je v rozsahu 0,0 až 1,0.
import random
print(random.random())
# 0.4496839011176701
random.uniform() (Jakýkoli rozsah čísel s plovoucí desetinnou čárkou)
uniform(a, b)
Funkce tohoto náhodného modulu generují náhodná čísla typu float s pohyblivou řádovou čárkou v některém z následujících rozsahů
a <= n <= b
b <= n <= a
import random
print(random.uniform(100, 200))
# 175.26585048238275
Oba argumenty mohou být buď větší, nebo menší; pokud se rovnají, vrátí přirozeně pouze tuto hodnotu. Návratovou hodnotou je vždy float.
print(random.uniform(100, -100))
# -27.82338731501028
print(random.uniform(100, 100))
# 100.0
Argument lze zadat také jako float.
print(random.uniform(1.234, 5.637))
# 2.606743596829249
Zda je hodnota b zahrnuta do rozsahu, závisí na následujícím zaokrouhlení, jak je zdokumentováno.a + (b-a) * random.random()
Zda je hodnota koncového bodu b v rozsahu, nebo ne, závisí na zaokrouhlování s plovoucí desetinnou čárkou v následující rovnici
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation
Generování náhodných čísel, která se řídí normálním rozdělením, Gaussovým rozdělením atd.
Výše uvedené funkce random() a uniform() generují rovnoměrně rozložená náhodná čísla, ale existují také funkce pro generování čísel s pohyblivou řádovou čárkou, která se řídí následujícím rozložením.
- rozdělení beta:
random.betavariate()
- exponenciální rozdělení:
random.expovariate()
- gama rozdělení:
random.gammavariate()
- Gaussovo rozdělení:
random.gauss()
- lognormální rozdělení:
random.lognormvariate()
- normální rozdělení:
random.normalvariate()
- Von Misesovo rozdělení:
random.vonmisesvariate()
- Paretovo rozdělení:
random.paretovariate()
- Weibullovo rozdělení:
random.weibullvariate()
Parametry jednotlivých distribucí se zadávají pomocí argumentů. Podrobnosti naleznete v oficiální dokumentaci.
random.randrange() (Celé číslo libovolného rozsahu a kroku)
randrange(start, stop, step)
Funkce tohoto náhodného modulu vrací náhodně vybraný prvek z následujících prvků.range(start, stop, step)
Stejně jako u funkce range() lze argumenty start a step vynechat. Pokud jsou vynechány, start=0 a krok=1.
import random
print(list(range(10)))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(random.randrange(10))
# 5
Argument step lze nastavit tak, aby generoval sudé nebo liché náhodné celé číslo nebo náhodné celé číslo, které je násobkem tří.
Pokud je například počátek sudý a krok=2, lze náhodně získat pouze sudá celá čísla v daném rozsahu.
print(list(range(10, 20, 2)))
# [10, 12, 14, 16, 18]
print(random.randrange(10, 20, 2))
# 18
random.randint() (Celé číslo v libovolném rozsahu)
randint(a, b)
Funkce tohoto náhodného modulu vrací následující náhodné celé číslo int.a <= n <= b
randrange(a, b + 1)
Ekvivalentní; všimněte si, že do rozsahu je zahrnuta i hodnota b.
print(random.randint(50, 100))
# print(random.randrange(50, 101))
# 74
Generování seznamu s náhodnými čísly jako prvky
V této části vysvětlíme, jak pomocí modulu random standardní knihovny vygenerovat seznam s náhodnými čísly jako prvky.
Seznam náhodných čísel s pohyblivou řádovou čárkou
Chcete-li vygenerovat seznam, jehož prvky jsou náhodná čísla s pohyblivou řádovou čárkou, zkombinujte funkce random() a uniform() se zápisem pro porozumění seznamu.
import random
print([random.random() for i in range(5)])
# [0.5518201298350598, 0.3476911314933616, 0.8463426180468342, 0.8949046353303931, 0.40822657702632625]
Ve výše uvedeném příkladu je použita funkce range(), ale pro požadovaný počet prvků je možné použít i seznamy a tuply. Další podrobnosti o seznamových comprehenzích naleznete v následujícím článku.
- Související články:Použití notace seznamů v jazyce Python
Seznam celočíselných náhodných čísel int
Při generování seznamu, jehož prvky jsou celá náhodná čísla, může kombinace výše uvedených funkcí randange() a randint() s notací pro porozumění seznamu vést k duplicitním hodnotám.
print([random.randint(0, 10) for i in range(5)])
# [8, 5, 7, 10, 7]
Pokud chcete vytvořit náhodnou posloupnost celých čísel bez duplikací, vyberte prvky funkce range() s libovolným rozsahem pomocí funkce random.sample().
print(random.sample(range(10), k=5))
# [6, 4, 3, 7, 5]
print(random.sample(range(100, 200, 10), k=5))
# [130, 190, 140, 150, 170]
Další informace o funkci random.sample() naleznete v následujícím článku.
- Související články:Výběr náhodných prvků ze seznamu v jazyce Python pomocí funkce choice(), sample(), choices()
Inicializace generátoru náhodných čísel (stanovení semínka náhodných čísel)
Zadáním libovolného celého čísla do funkce seed() modulu random lze stanovit semeno náhodného čísla a inicializovat generátor náhodných čísel.
Po inicializaci stejným semínkem se náhodná hodnota generuje vždy stejným způsobem.
random.seed(0)
print(random.random())
# 0.8444218515250481
print(random.random())
# 0.7579544029403025
random.seed(0)
print(random.random())
# 0.8444218515250481
print(random.random())
# 0.7579544029403025