Generovanie náhodných desatinných a celých čísel v jazyku Python vrátane funkcií random(), randrange() a randint()

obchodné

Náhodné čísla možno generovať pomocou funkcií random(), uniform(), randange() a randint() v module random štandardnej knižnice Python.

Modul random je súčasťou štandardnej knižnice, takže nie je potrebná žiadna dodatočná inštalácia. Samozrejme, musíte ho importovať.

Tu sú uvedené tieto informácie.

  • random.random()(Číslo s pohyblivou rádovou čiarkou medzi 0,0 a 1,0)
  • random.uniform()(ľubovoľný rozsah čísel s pohyblivou desatinnou čiarkou)
  • Generovanie náhodných čísel, ktoré sa riadia normálnym rozdelením, Gaussovým rozdelením atď.
  • random.randrange()(Celé číslo s ľubovoľným rozsahom a krokom)
  • random.randint()(Celé číslo v ľubovoľnom rozsahu)
  • Generovanie zoznamu s náhodnými číslami ako prvkami
    • Zoznam náhodných čísel s pohyblivou rádovou čiarkou
    • Zoznam celých náhodných čísel
  • Inicializácia generátora náhodných čísel (nastavenie semienka náhodných čísel)

Pozrite si nasledujúci článok o tom, ako náhodne vybrať alebo zoradiť prvky zoznamu.

random.random() (Číslo s pohyblivou rádovou čiarkou medzi 0,0 a 1,0)

Funkcia random() modulu random generuje náhodné číslo s pohyblivou desatinnou čiarkou typu float, ktoré je v rozsahu od 0,0 do 1,0.

import random

print(random.random())
# 0.4496839011176701

random.uniform() (ľubovoľný rozsah čísel s pohyblivou desatinnou čiarkou)

uniform(a, b)Funkcie tohto náhodného modulu generujú náhodné čísla s pohyblivou desatinnou čiarkou typu float v ľubovoľnom z nasledujúcich rozsahov

  • a <= n <= b
  • b <= n <= a
import random

print(random.uniform(100, 200))
# 175.26585048238275

Dva argumenty môžu byť väčšie alebo menšie; ak sú rovnaké, vrátia prirodzene len túto hodnotu. Návratová hodnota je vždy float.

print(random.uniform(100, -100))
# -27.82338731501028

print(random.uniform(100, 100))
# 100.0

Argument môže byť zadaný aj ako float.

print(random.uniform(1.234, 5.637))
# 2.606743596829249

To, či je hodnota b zahrnutá do rozsahu, závisí od nasledujúceho zaokrúhlenia, ako je zdokumentované.
a + (b-a) * random.random()

To, či je hodnota koncového bodu b v rozsahu alebo nie, závisí od zaokrúhľovania s pohyblivou rádovou čiarkou v nasledujúcej rovnici
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation

Generovanie náhodných čísel, ktoré sa riadia normálnym rozdelením, Gaussovým rozdelením atď.

Vyššie uvedené funkcie random() a uniform() generujú rovnomerne rozdelené náhodné čísla, ale existujú aj funkcie na generovanie čísel s pohyblivou rádovou čiarkou, ktoré sa riadia nasledujúcim rozdelením.

  • beta rozdelenie:random.betavariate()
  • exponenciálne rozdelenie:random.expovariate()
  • gama rozdelenie:random.gammavariate()
  • Gaussovo rozdelenie:random.gauss()
  • lognormálne rozdelenie:random.lognormvariate()
  • normálne rozdelenie:random.normalvariate()
  • Von Misesovo rozdelenie:random.vonmisesvariate()
  • Paretovo rozdelenie:random.paretovariate()
  • Weibullovo rozdelenie:random.weibullvariate()

Parametre každého rozdelenia sa určujú pomocou argumentov. Podrobnosti nájdete v oficiálnej dokumentácii.

random.randrange() (Celé číslo s ľubovoľným rozsahom a krokom)

randrange(start, stop, step)
Funkcia tohto náhodného modulu vracia náhodne vybraný prvok z nasledujúcich prvkov.
range(start, stop, step)

Rovnako ako pri range() možno argumenty start a step vynechať. Ak sú vynechané, štart=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 možno nastaviť tak, aby sa generovalo párne alebo nepárne náhodné celé číslo alebo náhodné celé číslo, ktoré je násobkom troch.

Ak je napríklad začiatok párny a krok = 2, možno náhodne získať len párne celé čísla v rozsahu.

print(list(range(10, 20, 2)))
# [10, 12, 14, 16, 18]

print(random.randrange(10, 20, 2))
# 18

random.randint() (Celé číslo v ľubovoľnom rozsahu)

randint(a, b)
Funkcia tohto náhodného modulu vracia nasledujúce náhodné celé číslo int.
a <= n <= b
randrange(a, b + 1)Rovnaké; všimnite si, že do rozsahu je zahrnutá aj hodnota b.

print(random.randint(50, 100))
# print(random.randrange(50, 101))
# 74

Generovanie zoznamu s náhodnými číslami ako prvkami

V tejto časti vysvetlíme, ako použiť modul random štandardnej knižnice na generovanie zoznamu s náhodnými číslami ako prvkami.

Zoznam náhodných čísel s pohyblivou desatinnou čiarkou

Ak chcete vygenerovať zoznam, ktorého prvky sú náhodné čísla s pohyblivou desatinnou čiarkou, skombinujte funkcie random() a uniform() so zápisom porozumenia zoznamu.

import random

print([random.random() for i in range(5)])
# [0.5518201298350598, 0.3476911314933616, 0.8463426180468342, 0.8949046353303931, 0.40822657702632625]

V uvedenom príklade sa používa funkcia range(), ale pre požadovaný počet prvkov je možné použiť aj zoznamy a kôpky. Podrobnejšie informácie o porozumení zoznamov nájdete v nasledujúcom článku.

Zoznam celočíselných náhodných čísel int

Pri generovaní zoznamu, ktorého prvky sú celočíselné náhodné čísla, môže kombinácia vyššie uvedených funkcií randange() a randint() so zápisom porozumenia zoznamu viesť k duplicitným hodnotám.

print([random.randint(0, 10) for i in range(5)])
# [8, 5, 7, 10, 7]

Ak chcete vytvoriť náhodnú postupnosť celých čísel bez duplikácie, vyberte prvky funkcie range() s ľubovoľným rozsahom pomocou funkcie 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]

Viac informácií o funkcii random.sample() nájdete v nasledujúcom článku.

Inicializácia generátora náhodných čísel (nastavenie semienka náhodných čísel)

Zadaním ľubovoľného celého čísla funkcii seed() modulu random je možné stanoviť semeno náhodného čísla a inicializovať generátor náhodných čísel.

Po inicializácii s rovnakým semienkom sa náhodná hodnota generuje vždy rovnakým spôsobom.

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
Copied title and URL