Generiranje naključnih decimalk in celih števil v programu Python, vključno s funkcijami random(), randrange() in randint()

Posel

Naključna števila lahko ustvarite s funkcijami random(), uniform(), randange() in randint() v modulu random standardne knjižnice Python.

Modul random je vključen v standardno knjižnico, zato dodatna namestitev ni potrebna. Seveda ga morate uvoziti.

Tu so na voljo naslednje informacije.

  • random.random()(Število s plavajočo vejico med 0,0 in 1,0)
  • random.uniform()(poljubno območje števil s plavajočo vejico)
  • Generiranje naključnih števil, ki sledijo normalni porazdelitvi, Gaussovi porazdelitvi itd.
  • random.randrange()(Celoštevilsko število s poljubnim obsegom in korakom)
  • random.randint()(Celoštevilsko število v poljubnem območju)
  • Ustvarjanje seznama z naključnimi številkami kot elementi
    • Seznam naključnih števil s plavajočo vejico
    • Seznam celih naključnih števil
  • Inicializacija generatorja naključnih števil (določitev semena naključnih števil)

V naslednjem članku si oglejte, kako naključno izločiti ali razvrstiti elemente seznama.

random.random() (Število s plavajočo vejico med 0,0 in 1,0)

Funkcija random() modula random ustvari naključno število s plavajočo vejico tipa float, ki je med 0,0 in 1,0.

import random

print(random.random())
# 0.4496839011176701

random.uniform() (poljubno območje števil s plavajočo vejico)

uniform(a, b)Funkcije tega naključnega modula generirajo naključna števila s spremenljivo vejico tipa float v katerem koli od naslednjih razponov

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

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

Argumenta sta lahko večja ali manjša; če sta enaka, seveda vrneta le to vrednost. Vrnjena vrednost je vedno float.

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

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

Argument je lahko naveden tudi kot float.

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

Ali je vrednost b vključena v območje, je odvisno od naslednjega zaokroževanja, kot je dokumentirano.
a + (b-a) * random.random()

Ali je vrednost končne točke b v območju ali ne, je odvisno od zaokroževanja s plavajočo vejico v naslednji enačbi
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation

Generiranje naključnih števil, ki sledijo normalni porazdelitvi, Gaussovi porazdelitvi itd.

Zgornji funkciji random() in uniform() generirata enakomerno porazdeljena naključna števila, obstajajo pa tudi funkcije za generiranje števil s plavajočo vejico, ki sledijo naslednji porazdelitvi.

  • porazdelitev beta:random.betavariate()
  • eksponentna porazdelitev:random.expovariate()
  • porazdelitev gama:random.gammavariate()
  • Gaussova porazdelitev:random.gauss()
  • lognormalna porazdelitev:random.lognormvariate()
  • normalna porazdelitev:random.normalvariate()
  • Von Misesova porazdelitev:random.vonmisesvariate()
  • Paretova porazdelitev:random.paretovariate()
  • Weibullova porazdelitev:random.weibullvariate()

Parametri vsake distribucije so določeni z argumenti. Za podrobnosti glejte uradno dokumentacijo.

random.randrange() (Celoštevilsko število s poljubnim obsegom in korakom)

randrange(start, stop, step)
Funkcija tega naključnega modula vrne naključno izbran element izmed naslednjih elementov.
range(start, stop, step)

Tako kot pri range() lahko argumenta start in step izpustite. Če sta izpuščena, sta start=0 in korak=1.

import random

print(list(range(10)))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(random.randrange(10))
# 5

Argument korak lahko nastavite tako, da se ustvari sodo ali liho naključno celo število ali naključno celo število, ki je večkratnik treh.

Če je na primer začetna vrednost liha in korak = 2, lahko naključno dobimo samo liha cela števila v območju.

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

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

random.randint() (Celoštevilsko število v poljubnem območju)

randint(a, b)
Funkcija tega naključnega modula vrne naslednje naključno celo število int.
a <= n <= b
randrange(a, b + 1)Enakovredno temu; upoštevajte, da je v območje vključena tudi vrednost b.

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

Ustvarjanje seznama z naključnimi številkami kot elementi

V tem razdelku bomo razložili, kako z modulom random standardne knjižnice ustvariti seznam z naključnimi števili kot elementi.

Seznam naključnih števil s plavajočo vejico

Če želite ustvariti seznam, katerega elementi so naključna števila s plavajočo vejico, združite funkciji random() in uniform() z zapisom za razumevanje seznama.

import random

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

V zgornjem primeru je uporabljena funkcija range(), vendar so za želeno število elementov možni tudi seznami in tuple. Za več podrobnosti o razumevanju seznamov glejte naslednji članek.

Seznam celoštevilskih naključnih števil int

Pri generiranju seznama, katerega elementi so celoštevilska naključna števila, lahko kombinacija zgornjih funkcij randange() in randint() z zapisom za razumevanje seznama povzroči podvajanje vrednosti.

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

Če želite ustvariti naključno zaporedje celih števil brez podvajanja, izločite elemente funkcije range() s poljubnim razponom z uporabo funkcije 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]

Za več informacij o funkciji random.sample() glejte naslednji članek.

Inicializacija generatorja naključnih števil (določitev semena naključnih števil)

S podajanjem poljubnega celega števila funkciji seed() modula random lahko določite seme naključnega števila in inicializirate generator naključnih števil.

Po inicializaciji z istim semenom se naključna vrednost vedno ustvari na enak način.

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