Generació de decimals i nombres enters aleatoris a Python, inclosos random(), randrange() i randint()

Negocis

Els números aleatoris es poden generar mitjançant les funcions random(), uniform(), randange() i randint() del mòdul aleatori de la biblioteca estàndard de Python.

El mòdul aleatori s’inclou a la biblioteca estàndard, de manera que no cal cap instal·lació addicional. Per descomptat, cal importar-lo.

La informació següent es proporciona aquí.

  • random.random()(Nombre de coma flotant entre 0,0 i 1,0)
  • random.uniform()(Qualsevol rang de nombres de coma flotant)
  • Genera números aleatoris que segueixen una distribució normal, una distribució gaussiana, etc.
  • random.randrange()(Nombre enter d’interval i pas arbitrari)
  • random.randint()(Un nombre enter en qualsevol interval)
  • Generació d’una llista amb nombres aleatoris com a elements
    • Llista de nombres aleatoris de coma flotant
    • Llista de nombres enters aleatoris
  • Inicialitzar el generador de números aleatoris (fixeu la llavor de números aleatoris)

Consulteu l’article següent sobre com extreure o ordenar elements d’una llista aleatòriament.

random.random()(Nombre de coma flotant entre 0,0 i 1,0)

La funció random() del mòdul aleatori genera un nombre aleatori de coma flotant de tipus float que està entre 0,0 i 1,0.

import random

print(random.random())
# 0.4496839011176701

random.uniform()(Qualsevol rang de nombres de coma flotant)

uniform(a, b)Les funcions d’aquest mòdul aleatori generen nombres aleatoris de tipus flotant de nombres de coma flotant en qualsevol dels intervals següents

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

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

Els dos arguments poden ser més grans o més petits; si són iguals, naturalment només retornaran aquest valor. El valor de retorn és sempre flotant.

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

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

L’argument també es pot especificar com a flotant.

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

Si el valor de b s’inclou a l’interval depèn de l’arrodoniment següent, tal com es documenta.
a + (b-a) * random.random()

Que el valor del punt final b estigui dins l’interval o no depèn de l’arrodoniment de coma flotant a l’equació següent
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation

Genera números aleatoris que segueixen una distribució normal, una distribució gaussiana, etc.

Les funcions aleatòries () i uniform () anteriors generen nombres aleatoris distribuïts uniformement, però també hi ha funcions per generar números de coma flotant que segueixen la següent distribució.

  • distribució beta:random.betavariate()
  • distribució exponencial:random.expovariate()
  • distribució gamma:random.gammavariate()
  • Distribució gaussiana:random.gauss()
  • distribució lognormal:random.lognormvariate()
  • distribució normal:random.normalvariate()
  • Distribució Von Mises:random.vonmisesvariate()
  • Distribució de Pareto:random.paretovariate()
  • Distribució Weibull:random.weibullvariate()

Els paràmetres de cada distribució s’especifiquen mitjançant arguments. Consulteu la documentació oficial per a més detalls.

random.randrange()(Nombre enter d’interval i pas arbitrari)

randrange(start, stop, step)
La funció d’aquest mòdul aleatori retorna un element seleccionat aleatòriament dels elements següents.
range(start, stop, step)

Igual que amb range(), es poden ometre els arguments start i step. Si s’ometen, inici=0 i pas=1.

import random

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

print(random.randrange(10))
# 5

El pas de l’argument es pot configurar per generar un nombre enter aleatori parell o senar, o un nombre enter aleatori que sigui múltiple de tres.

Per exemple, si start és parell i pas=2, només es poden obtenir aleatòriament nombres enters parells de l’interval.

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

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

random.randint()(Un nombre enter en qualsevol interval)

randint(a, b)
La funció d’aquest mòdul aleatori retorna el següent enter aleatori int.
a <= n <= b
randrange(a, b + 1)Equivalent a això; tingueu en compte que el valor de b també s’inclou a l’interval.

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

Generació d’una llista amb nombres aleatoris com a elements

En aquesta secció, explicarem com utilitzar el mòdul aleatori de la biblioteca estàndard per generar una llista amb nombres aleatoris com a elements.

Llista de nombres aleatoris amb flotants de coma flotant

Per generar una llista els elements de la qual són nombres aleatoris de coma flotant, combineu les funcions aleatòria() i uniform() amb la notació de comprensió de llista.

import random

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

A l’exemple anterior, s’utilitza range(), però també són possibles llistes i tuples per al nombre desitjat d’elements. Per obtenir més detalls sobre la comprensió de la llista, consulteu l’article següent.

Llista de nombres enters int aleatoris

Quan es genera una llista els elements de la qual són nombres aleatoris enters, la combinació de randange() i randint() anteriors amb la notació de comprensió de la llista pot donar lloc a valors duplicats.

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

Si voleu fer una seqüència aleatòria de nombres enters sense duplicació, extreu els elements de range() amb un rang arbitrari utilitzant 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]

Per obtenir més informació sobre random.sample(), consulteu l’article següent.

Inicialitzar el generador de números aleatoris (fixeu la llavor de números aleatoris)

En donar un nombre enter arbitrari a la funció seed() del mòdul aleatori, es pot arreglar la llavor de nombres aleatoris i es pot inicialitzar el generador de números aleatoris.

Després de la inicialització amb la mateixa llavor, el valor aleatori sempre es genera de la mateixa manera.

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