Generiranje nasumičnih decimala i cijelih brojeva u Pythonu, uključujući random(), randrange() i randint()

Poslovanje

Slučajni brojevi mogu se generirati korištenjem funkcija random(), uniform(), randange() i randint() u random modulu standardne biblioteke Python.

Nasumični modul je uključen u standardnu ​​biblioteku, tako da nije potrebna dodatna instalacija. Naravno, morate ga uvesti.

Ovdje su navedene sljedeće informacije.

  • random.random()(Broj s pomičnim zarezom između 0,0 i 1,0)
  • random.uniform()(Bilo koji raspon brojeva s pomičnim zarezom)
  • Generirajte nasumične brojeve koji slijede normalnu distribuciju, Gaussovu distribuciju itd.
  • random.randrange()(Cijeli broj proizvoljnog raspona i koraka)
  • random.randint()(Cijeli broj u bilo kojem rasponu)
  • Generiranje popisa sa slučajnim brojevima kao elementima
    • Popis nasumičnih brojeva s pomičnim zarezom
    • Popis cjelobrojnih slučajnih brojeva
  • Inicijalizirajte generator slučajnih brojeva (popravite sjeme slučajnog broja)

Pogledajte sljedeći članak o tome kako nasumično izdvojiti ili sortirati elemente popisa.

random.random()(Broj s pomičnim zarezom između 0,0 i 1,0)

Funkcija random modula random() generira slučajni broj s pomičnim zarezom tipa float koji je između 0,0 i 1,0.

import random

print(random.random())
# 0.4496839011176701

random.uniform()(Bilo koji raspon brojeva s pomičnim zarezom)

uniform(a, b)Funkcije ovog slučajnog modula generiraju nasumične brojeve tipa float s pomičnim zarezom u bilo kojem od sljedećih raspona

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

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

Dva argumenta mogu biti ili veći ili manji; ako su jednaki, prirodno će vratiti samo tu vrijednost. Povratna vrijednost je uvijek float.

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

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

Argument se također može odrediti kao float.

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

Hoće li vrijednost b biti uključena u raspon ovisi o sljedećem zaokruživanju, kao što je dokumentirano.
a + (b-a) * random.random()

Je li vrijednost krajnje točke b u rasponu ili ne ovisi o zaokruživanju s pomičnim zarezom u sljedećoj jednadžbi
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation

Generirajte nasumične brojeve koji slijede normalnu distribuciju, Gaussovu distribuciju itd.

Gore navedene funkcije random() i uniform() generiraju jednoliko raspoređene slučajne brojeve, ali postoje i funkcije za generiranje brojeva s pomičnim zarezom koje slijede sljedeću distribuciju.

  • beta distribucija:random.betavariate()
  • eksponencijalna distribucija:random.expovariate()
  • gama distribucija:random.gammavariate()
  • Gaussova raspodjela:random.gauss()
  • lognormalna raspodjela:random.lognormvariate()
  • normalna distribucija:random.normalvariate()
  • Von Misesova distribucija:random.vonmisesvariate()
  • Pareto distribucija:random.paretovariate()
  • Weibullova distribucija:random.weibullvariate()

Parametri svake distribucije su specificirani argumentima. Za detalje pogledajte službenu dokumentaciju.

random.randrange()(Cijeli broj proizvoljnog raspona i koraka)

randrange(start, stop, step)
Funkcija ovog slučajnog modula vraća nasumično odabrani element iz sljedećih elemenata.
range(start, stop, step)

Kao i kod range(), argumenti start i step mogu se izostaviti. Ako su izostavljeni, start=0 i step=1.

import random

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

print(random.randrange(10))
# 5

Korak argumenta može se postaviti tako da generira paran ili neparan nasumični cijeli broj, ili slučajni cijeli broj koji je višekratnik tri.

Na primjer, ako je početak paran i korak=2, samo parni cijeli brojevi u rasponu mogu se dobiti nasumično.

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

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

random.randint()(Cijeli broj u bilo kojem rasponu)

randint(a, b)
Funkcija ovog slučajnog modula vraća sljedeći nasumični cijeli broj.
a <= n <= b
randrange(a, b + 1)Ekvivalentno ovome; imajte na umu da je vrijednost b također uključena u raspon.

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

Generiranje popisa sa slučajnim brojevima kao elementima

U ovom ćemo odjeljku objasniti kako koristiti nasumični modul standardne biblioteke za generiranje popisa sa slučajnim brojevima kao elementima.

Popis slučajnih brojeva s plutajućim zarezom

Da biste generirali popis čiji su elementi slučajni brojevi s pomičnim zarezom, kombinirajte funkcije random() i uniform() s notacijom za razumijevanje popisa.

import random

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

U gornjem primjeru koristi se range(), ali su moguće liste i torke za željeni broj elemenata. Za više pojedinosti o razumijevanju popisa, pogledajte sljedeći članak.

Popis integer int slučajnih brojeva

Prilikom generiranja popisa čiji su elementi cjelobrojni slučajni brojevi, kombiniranje gornjeg randange() i randint() s notacijom razumijevanja popisa može rezultirati duplim vrijednostima.

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

Ako želite napraviti nasumični slijed cijelih brojeva bez dupliciranja, izdvojite elemente range() s proizvoljnim rasponom pomoću 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 više informacija o random.sample(), pogledajte sljedeći članak.

Inicijalizirajte generator slučajnih brojeva (popravite sjeme slučajnog broja)

Davanjem proizvoljnog cijelog broja funkciji seed(), seed nasumičnih brojeva može se fiksirati i generator slučajnih brojeva se može inicijalizirati.

Nakon inicijalizacije s istim sjemenom, slučajna vrijednost se uvijek generira na isti 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