Véletlenszerű tizedes- és egész számok generálása Pythonban, beleértve a random(), randrange() és randint() függvényeket.

Üzleti

A Python szabványos könyvtár random moduljának random(), uniform(), randange() és randint() függvényeivel lehet véletlen számokat generálni.

A random modul a szabványos könyvtárban szerepel, így nincs szükség további telepítésre. Természetesen importálni kell.

A következő információk itt találhatók.

  • random.random()(0,0 és 1,0 közötti lebegőpontos szám)
  • random.uniform()(Bármely lebegőpontos számtartomány)
  • Olyan véletlen számok generálása, amelyek normális eloszlást, Gauss-eloszlást stb. követnek.
  • random.randrange()(Tetszőleges tartományú és lépésszámú egész szám)
  • random.randint()(Egész szám bármely tartományban)
  • Egy lista generálása véletlen számokkal mint elemekkel
    • Véletlenszerű lebegőpontos számok listája
    • Egész számok véletlenszerű számainak listája
  • A véletlenszám-generátor inicializálása (a véletlenszám-vetőmag rögzítése)

A lista elemeinek véletlenszerű kivonásáról vagy rendezéséről lásd a következő cikket.

random.random() (0,0 és 1,0 közötti lebegőpontos szám)

A random modul random() függvénye egy véletlenszerű float típusú lebegőpontos számot generál, amely 0.0 és 1.0 között van.

import random

print(random.random())
# 0.4496839011176701

random.uniform() (Bármely lebegőpontos számtartomány)

uniform(a, b)Ennek a véletlen modulnak a függvényei a következő tartományok bármelyikében lebegőpontos float típusú véletlen számokat generálnak

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

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

A két argumentum lehet nagyobb vagy kisebb; ha egyenlőek, akkor természetesen csak ezt az értéket adja vissza. A visszatérési érték mindig egy float.

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

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

Az argumentum floatként is megadható.

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

Az, hogy a b értéke szerepel-e a tartományban, a következő kerekítéstől függ, amint az dokumentálva van.
a + (b-a) * random.random()

Az, hogy a b végpont értéke a tartományon belül van-e vagy sem, a lebegőpontos kerekítéstől függ a következő egyenlet szerint
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation

Olyan véletlen számok generálása, amelyek normális eloszlást, Gauss-eloszlást stb. követnek.

A fenti random() és uniform() függvények egyenletes eloszlású véletlen számokat generálnak, de vannak olyan függvények is, amelyek a következő eloszlást követő lebegőpontos számokat generálnak.

  • béta-eloszlás:random.betavariate()
  • exponenciális eloszlás:random.expovariate()
  • gammaeloszlás:random.gammavariate()
  • Gauss-eloszlás:random.gauss()
  • lognormális eloszlás:random.lognormvariate()
  • normális eloszlás:random.normalvariate()
  • Von Mises eloszlás:random.vonmisesvariate()
  • Pareto-eloszlás:random.paretovariate()
  • Weibull eloszlás:random.weibullvariate()

Az egyes eloszlások paraméterei argumentumokkal adhatók meg. A részletekért lásd a hivatalos dokumentációt.

random.randrange() (Tetszőleges tartományú és lépésszámú egész szám)

randrange(start, stop, step)
Ennek a random modulnak a funkciója egy véletlenszerűen kiválasztott elemet ad vissza a következő elemek közül.
range(start, stop, step)

A range()-hoz hasonlóan a start és step argumentumok elhagyhatók. Ha elhagyjuk őket, start=0 és step=1.

import random

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

print(random.randrange(10))
# 5

A step argumentummal beállítható, hogy páros vagy páratlan véletlen egész számot generáljon, vagy olyan véletlen egész számot, amely háromszorosa a háromnak.

Ha például a start páros és a step=2, akkor a tartományban csak páros egész számokat kaphatunk véletlenszerűen.

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

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

random.randint() (Egész szám bármely tartományban)

randint(a, b)
Ennek a véletlen modulnak a függvénye a következő véletlen egész számot adja vissza.
a <= n <= b
randrange(a, b + 1)Ezzel egyenértékű; vegye figyelembe, hogy a b értéke is szerepel a tartományban.

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

Egy lista generálása véletlen számokkal mint elemekkel

Ebben a szakaszban elmagyarázzuk, hogyan használhatjuk a szabványos könyvtár random modulját egy olyan lista létrehozására, amelynek elemei véletlen számok.

Véletlen számok listája lebegőpontos lebegőszámokkal

Ha olyan listát szeretne létrehozni, amelynek elemei lebegőpontos véletlen számok, kombinálja a random() és uniform() függvényeket a lista megértésének jelölésével.

import random

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

A fenti példában a range() funkciót használjuk, de a kívánt elemszámhoz listák és tuple-ok is lehetségesek. A listák megértéséről bővebben a következő cikkben olvashat.

Egész int véletlen számok listája

Ha olyan listát generálunk, amelynek elemei egész véletlen számok, a fenti randange() és randint() kombinálása a lista megértésének jelölésével duplikált értékeket eredményezhet.

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

Ha egész számok véletlenszerű, duplikáció nélküli sorozatát szeretné létrehozni, akkor a range() elemeit egy tetszőleges tartományban vegye ki a random.sample() segítségével.

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]

A random.sample() funkcióval kapcsolatos további információkért olvassa el a következő cikket.

A véletlenszám-generátor inicializálása (a véletlenszám-vetőmag rögzítése)

A random modul seed() függvényének egy tetszőleges egész szám megadásával rögzíthető a véletlenszám-vetőmag és inicializálható a véletlenszám-generátor.

Az azonos maggal történő inicializálás után a véletlen érték mindig ugyanúgy generálódik.

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