Satunnaisten desimaalien ja kokonaislukujen luominen Pythonissa, mukaan lukien random(), randrange() ja randint().

liiketoiminta

Satunnaislukuja voidaan luoda Pythonin standardikirjaston random-moduulin random(), uniform(), randange() ja randint() -funktioilla.

Satunnaismoduuli sisältyy standardikirjastoon, joten lisäasennusta ei tarvita. Sinun on tietenkin tuotava se.

Seuraavat tiedot annetaan tässä.

  • random.random()(Liukuluku välillä 0,0-1,0.)
  • random.uniform()(Mikä tahansa liukulukujen alue)
  • Luo satunnaislukuja, jotka noudattavat normaalijakaumaa, Gaussin jakaumaa jne.
  • random.randrange()(Kokonaisluku, jonka vaihteluväli ja askel on mielivaltainen)
  • random.randint()(Kokonaisluku millä tahansa alueella)
  • Luettelon luominen, jonka elementteinä on satunnaislukuja
    • Luettelo satunnaisista liukuluvuista
    • Luettelo kokonaislukujen satunnaisluvuista
  • Satunnaislukugeneraattorin alustaminen (satunnaislukusiemenen määrittäminen).

Katso seuraavasta artikkelista, miten luettelon elementtejä voidaan poimia tai lajitella satunnaisesti.

random.random() (Liukuluku välillä 0,0-1,0.)

Random-moduulin funktio random() tuottaa satunnaisen float-tyyppisen liukuluvun, joka on välillä 0,0-1,0.

import random

print(random.random())
# 0.4496839011176701

random.uniform() (Mikä tahansa liukulukujen alue)

uniform(a, b)Tämän satunnaismoduulin funktiot tuottavat satunnaislukuja, joiden liukulukutyyppi on float, millä tahansa seuraavista alueista.

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

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

Kaksi argumenttia voi olla joko suurempia tai pienempiä; jos ne ovat yhtä suuria, ne palauttavat luonnollisesti vain tämän arvon. Paluuarvo on aina liukuluku.

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

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

Argumentti voidaan määrittää myös liukulukuna.

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

Se, sisällytetäänkö b:n arvo vaihteluväliin, riippuu seuraavasta pyöristyksestä, joka on dokumentoitu.
a + (b-a) * random.random()

Se, onko päätepisteen arvo b alueella vai ei, riippuu seuraavan yhtälön mukaisesta liukulukupisteen pyöristyksestä.
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation

Luo satunnaislukuja, jotka noudattavat normaalijakaumaa, Gaussin jakaumaa jne.

Edellä mainitut random()- ja uniform()-funktiot tuottavat tasaisesti jakautuneita satunnaislukuja, mutta on olemassa myös funktioita, jotka tuottavat seuraavan jakauman mukaisia liukulukuja.

  • beetajakauma:random.betavariate()
  • eksponenttijakauma:random.expovariate()
  • gammajakauma:random.gammavariate()
  • Gaussin jakauma:random.gauss()
  • lognormaalijakauma:random.lognormvariate()
  • normaalijakauma:random.normalvariate()
  • Von Misesin jakauma:random.vonmisesvariate()
  • Paretojakauma:random.paretovariate()
  • Weibull-jakauma:random.weibullvariate()

Kunkin jakauman parametrit määritetään argumenteilla. Katso lisätietoja virallisesta dokumentaatiosta.

random.randrange() (Kokonaisluku, jonka vaihteluväli ja askel on mielivaltainen)

randrange(start, stop, step)
Tämän satunnaismoduulin funktio palauttaa satunnaisesti valitun elementin seuraavista elementeistä.
range(start, stop, step)

Kuten kohdassa range(), argumentit start ja step voidaan jättää pois. Jos ne jätetään pois, start=0 ja step=1.

import random

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

print(random.randrange(10))
# 5

Argumentti step voidaan asettaa tuottamaan parillinen tai pariton satunnainen kokonaisluku tai satunnainen kokonaisluku, joka on kolmen monikerta.

Jos esimerkiksi alku on parillinen ja askel = 2, vain parilliset kokonaisluvut alueella voidaan saada satunnaisesti.

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

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

random.randint() (Kokonaisluku millä tahansa alueella)

randint(a, b)
Tämän satunnaismoduulin funktio palauttaa seuraavan satunnaisen kokonaisluvun int.
a <= n <= b
randrange(a, b + 1)Vastaa tätä; huomaa, että myös b:n arvo sisältyy alueeseen.

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

Luettelon luominen, jonka elementteinä on satunnaislukuja

Tässä luvussa kerrotaan, miten standardikirjaston satunnaismoduulin avulla luodaan lista, jonka alkioina on satunnaislukuja.

Luettelo satunnaisluvuista, joissa on liukulukuja

Voit luoda listan, jonka elementit ovat liukulukujen satunnaislukuja, yhdistämällä random()- ja uniform()-funktiot ja listan ymmärtämisen merkintätavan.

import random

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

Yllä olevassa esimerkissä on käytetty range()-toimintoa, mutta myös listat ja tuplet ovat mahdollisia halutun alkioiden määrän määrittämiseksi. Lisätietoja listojen ymmärrettävyydestä on seuraavassa artikkelissa.

Luettelo kokonaislukujen int satunnaisluvuista

Kun luodaan lista, jonka elementit ovat kokonaislukusatunnaislukuja, edellä mainittujen randange()- ja randint()-sovellusten yhdistäminen listan ymmärtämisen merkintätapaan voi johtaa päällekkäisiin arvoihin.

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

Jos haluat tehdä satunnaisen kokonaislukusarjan ilman päällekkäisyyksiä, poimi range()-olion elementit mielivaltaisella alueella käyttämällä random.sample()-ohjelmaa.

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]

Lisätietoja random.sample() -toiminnosta on seuraavassa artikkelissa.

Satunnaislukugeneraattorin alustaminen (satunnaislukusiemenen määrittäminen).

Antamalla satunnaismoduulin funktiolle seed() mielivaltainen kokonaisluku, satunnaislukujen siemen voidaan määrittää ja satunnaislukugeneraattori voidaan alustaa.

Kun satunnaisarvo on alustettu samalla siemenellä, se luodaan aina samalla tavalla.

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