Generering av slumpmässiga decimaler och heltal i Python, inklusive random(), randrange() och randint()

Företag

Slumpmässiga tal kan genereras med hjälp av funktionerna random(), uniform(), randange() och randint() i random-modulen i Pythons standardbibliotek.

Random-modulen ingår i standardbiblioteket, så ingen ytterligare installation krävs. Naturligtvis måste du importera den.

Här finns följande information.

  • random.random()(Ett flyttal mellan 0,0 och 1,0.)
  • random.uniform()(Alla intervall av flyttal)
  • Generera slumpmässiga tal som följer en normalfördelning, gaussisk fördelning osv.
  • random.randrange()(Hela tal med godtyckligt intervall och steg)
  • random.randint()(Ett heltal i ett valfritt intervall)
  • Generera en lista med slumpmässiga tal som element
    • Lista med slumpmässiga flyttalstal
    • Förteckning över slumpmässiga heltalssiffror
  • Initialisera generatorn för slumpmässiga tal (fastställa fröet för de slumpmässiga talen).

Se följande artikel om hur man slumpmässigt tar ut eller sorterar element i en lista.

random.random() (Ett flyttal mellan 0,0 och 1,0.)

Random-modulens funktion random() genererar ett slumpmässigt flyttal av typen float som ligger mellan 0,0 och 1,0.

import random

print(random.random())
# 0.4496839011176701

random.uniform() (Alla intervall av flyttal)

uniform(a, b)Funktionerna i denna slumpmodul genererar slumpmässiga tal av typen floating point-tal float i något av följande intervall

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

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

De två argumenten kan vara antingen större eller mindre; om de är lika stora returnerar de naturligtvis bara det värdet. Returvärdet är alltid en float.

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

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

Argumentet kan också anges som en float.

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

Huruvida värdet på b ingår i intervallet beror på följande avrundning, enligt dokumentationen.
a + (b-a) * random.random()

Huruvida slutpunktsvärdet b ligger inom intervallet eller inte beror på avrundningen med flytande punkter i följande ekvation
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation

Generera slumpmässiga tal som följer en normalfördelning, gaussisk fördelning osv.

Funktionerna random() och uniform() ovan genererar jämnt fördelade slumpmässiga tal, men det finns också funktioner för att generera flyttalstal som följer följande fördelning.

  • Betafördelning:random.betavariate()
  • exponentiell fördelning:random.expovariate()
  • Gammafördelning.:random.gammavariate()
  • Gaussisk fördelning:random.gauss()
  • lognormalfördelning:random.lognormvariate()
  • normalfördelning:random.normalvariate()
  • Von Mises-fördelning:random.vonmisesvariate()
  • Pareto-fördelning:random.paretovariate()
  • Weibull-fördelning:random.weibullvariate()

Parametrarna för varje fördelning anges med argument. Se den officiella dokumentationen för mer information.

random.randrange() (Hela tal med godtyckligt intervall och steg)

randrange(start, stop, step)
Funktionen i denna slumpmodul returnerar ett slumpmässigt valt element från följande element.
range(start, stop, step)

Precis som för range() kan argumenten start och step utelämnas. Om de utelämnas är start=0 och step=1.

import random

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

print(random.randrange(10))
# 5

Argumentet step kan ställas in för att generera ett jämnt eller udda slumpmässigt heltal eller ett slumpmässigt heltal som är en multipel av tre.

Om t.ex. start är jämn och step=2 kan endast jämna heltal i intervallet erhållas slumpmässigt.

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

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

random.randint() (Ett heltal i ett valfritt intervall)

randint(a, b)
Funktionen i denna slumpmodul returnerar följande slumpmässiga heltal int.
a <= n <= b
randrange(a, b + 1)Motsvarande; notera att värdet på b också ingår i intervallet.

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

Generera en lista med slumpmässiga tal som element

I det här avsnittet förklarar vi hur man använder standardbibliotekets random-modul för att generera en lista med slumpmässiga tal som element.

Lista med slumpmässiga tal med flyttal

Om du vill generera en lista vars element är slumpmässiga tal med flyttal kombinerar du funktionerna random() och uniform() med listförståelse.

import random

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

I exemplet ovan används range(), men listor och tupler är också möjliga för det önskade antalet element. Mer information om listförståelse finns i följande artikel.

Lista med heltal int slumpmässiga tal

När du genererar en lista vars element är slumpmässiga heltalstal kan kombinationen av ovanstående randange() och randint() med list comprehension-notationen resultera i dubbla värden.

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

Om du vill skapa en slumpmässig sekvens av heltal utan dubblering kan du extrahera elementen i range() med ett godtyckligt intervall med hjälp av 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]

Mer information om random.sample() finns i följande artikel.

Initialisera generatorn för slumpmässiga tal (fastställa fröet för de slumpmässiga talen).

Genom att ge ett godtyckligt heltal till random-modulens funktion seed() kan slumptalsfröet fastställas och slumptalsgeneratorn initialiseras.

Efter initialisering med samma frö skapas det slumpmässiga värdet alltid på samma sätt.

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