Generering af tilfældige decimaler og hele tal i Python, herunder random(), randrange() og randint()

Forretning

Tilfældige tal kan genereres ved hjælp af funktionerne random(), uniform(), randange() og randint() i random-modulet i Python-standardbiblioteket.

Random-modulet er inkluderet i standardbiblioteket, så der kræves ingen yderligere installation. Du skal selvfølgelig importere det.

Her findes følgende oplysninger.

  • random.random()(Flydende punkttal mellem 0,0 og 1,0)
  • random.uniform()(Et hvilket som helst interval af flydende punkttal)
  • Generer tilfældige tal, der følger en normalfordeling, Gaussisk fordeling osv.
  • random.randrange()(Hele tal med vilkårligt interval og trin)
  • random.randint()(Et heltal i et vilkårligt interval)
  • Generering af en liste med tilfældige tal som elementer
    • Liste over tilfældige flydende punkttal
    • Liste over hele tal med tilfældige tal
  • Initialisere generatoren af tilfældige tal (fastlægge det tilfældige talfrø)

Se følgende artikel om, hvordan du kan udtrække eller sortere elementer i en liste tilfældigt.

random.random() (Flydende punkttal mellem 0,0 og 1,0)

Random-modulets funktion random() genererer et tilfældigt flydende tal af typen float, der ligger mellem 0,0 og 1,0.

import random

print(random.random())
# 0.4496839011176701

random.uniform() (Et hvilket som helst interval af flydende punkttal)

uniform(a, b)Funktionerne i dette tilfældige modul genererer tilfældige tal af floating-point-tallet float-typen i et af følgende intervaller

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

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

De to argumenter kan enten være større eller mindre; hvis de er lige store, returnerer de naturligvis kun denne værdi. Den returnerede værdi er altid en float.

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

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

Argumentet kan også angives som en float.

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

Om værdien af b indgår i intervallet afhænger af den følgende afrunding, som er dokumenteret.
a + (b-a) * random.random()

Om endepunktsværdien b er inden for området eller ej afhænger af afrundingen med flydende komma i følgende ligning
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation

Generer tilfældige tal, der følger en normalfordeling, Gaussisk fordeling osv.

Funktionerne random() og uniform() ovenfor genererer jævnt fordelte tilfældige tal, men der findes også funktioner til at generere flydende tal, der følger den følgende fordeling.

  • betafordeling:random.betavariate()
  • eksponentiel fordeling:random.expovariate()
  • gamma-fordeling:random.gammavariate()
  • Gaussisk fordeling:random.gauss()
  • lognormalfordeling:random.lognormvariate()
  • normalfordeling:random.normalvariate()
  • Von Mises-fordeling:random.vonmisesvariate()
  • Pareto-fordeling:random.paretovariate()
  • Weibull-fordeling:random.weibullvariate()

Parametrene for hver fordeling angives ved hjælp af argumenter. Se den officielle dokumentation for yderligere oplysninger.

random.randrange() (Hele tal med vilkårligt interval og trin)

randrange(start, stop, step)
Funktionen i dette tilfældige modul returnerer et tilfældigt udvalgt element fra følgende elementer.
range(start, stop, step)

Som med range() kan argumenterne start og step udelades. Hvis de udelades, er start=0 og 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 indstilles til at generere et lige eller ulige tilfældigt heltal eller et tilfældigt heltal, som er et multiplum af tre.

Hvis start f.eks. er lige og step=2, kan kun lige hele tal i intervallet fås tilfældigt.

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

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

random.randint() (Et heltal i et vilkårligt interval)

randint(a, b)
Funktionen i dette tilfældige modul returnerer følgende tilfældige hele tal int.
a <= n <= b
randrange(a, b + 1)Svarer til dette; bemærk, at værdien af b også er inkluderet i intervallet.

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

Generering af en liste med tilfældige tal som elementer

I dette afsnit forklarer vi, hvordan du bruger standardbibliotekets random-modul til at generere en liste med tilfældige tal som elementer.

Liste over tilfældige tal med flydende komma-floattal

Hvis du vil generere en liste, hvis elementer er tilfældige tal med flydende komma, skal du kombinere funktionerne random() og uniform() med list comprehension notation.

import random

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

I eksemplet ovenfor anvendes range(), men lister og tupler er også mulige for det ønskede antal elementer. For flere oplysninger om list comprehensions henvises til følgende artikel.

Liste over heltal int tilfældige tal

Ved generering af en liste, hvis elementer er hele tilfældige tal, kan kombinationen af ovenstående randange() og randint() med list comprehension notation resultere i dobbelte værdier.

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

Hvis du ønsker at lave en tilfældig sekvens af hele tal uden gentagelser, skal du udtrække elementerne i range() med et vilkårligt interval ved hjælp af 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]

Du kan finde flere oplysninger om random.sample() i følgende artikel.

Initialisere generatoren af tilfældige tal (fastlægge det tilfældige talfrø)

Ved at give et vilkårligt heltal til random-modulets funktion seed(), kan tilfældige talfrø fastsættes, og generatoren af tilfældige tal kan initialiseres.

Efter initialisering med det samme frø genereres den tilfældige værdi altid på samme måde.

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