Generación de decimales y enteros aleatorios en Python, incluyendo random(), randrange() y randint()

Negocio

Se pueden generar números aleatorios utilizando las funciones random(), uniform(), randange() y randint() del módulo random de la biblioteca estándar de Python.

El módulo aleatorio está incluido en la biblioteca estándar, por lo que no se requiere ninguna instalación adicional. Por supuesto, es necesario importarlo.

La siguiente información se proporciona aquí.

  • random.random()(Número en coma flotante entre 0,0 y 1,0)
  • random.uniform()(Cualquier rango de números de coma flotante)
  • Generar números aleatorios que sigan una distribución normal, una distribución gaussiana, etc.
  • random.randrange()(Número entero de rango y paso arbitrarios)
  • random.randint()(Un número entero en cualquier rango)
  • Generar una lista con números aleatorios como elementos
    • Lista de números aleatorios en coma flotante
    • Lista de números aleatorios enteros
  • Inicializar el generador de números aleatorios (fijar la semilla de números aleatorios)

Consulte el siguiente artículo sobre cómo extraer u ordenar aleatoriamente los elementos de una lista.

random.random() (Número en coma flotante entre 0,0 y 1,0)

La función random() del módulo random genera un número aleatorio de punto flotante de tipo float que está entre 0.0 y 1.0.

import random

print(random.random())
# 0.4496839011176701

random.uniform() (Cualquier rango de números de coma flotante)

uniform(a, b)Las funciones de este módulo aleatorio generan números aleatorios de tipo flotante en cualquiera de los siguientes rangos

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

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

Los dos argumentos pueden ser mayores o menores; si son iguales, naturalmente sólo devolverán ese valor. El valor de retorno es siempre un float.

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

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

El argumento también se puede especificar como un flotador.

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

La inclusión del valor de b en el rango depende del siguiente redondeo, como se ha documentado.
a + (b-a) * random.random()

El hecho de que el valor del punto final b esté o no en el rango depende del redondeo en coma flotante en la siguiente ecuación
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation

Generar números aleatorios que sigan una distribución normal, una distribución gaussiana, etc.

Las funciones random() y uniform() anteriores generan números aleatorios distribuidos uniformemente, pero también hay funciones para generar números en coma flotante que siguen la siguiente distribución.

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

Los parámetros de cada distribución se especifican mediante argumentos. Consulte la documentación oficial para más detalles.

random.randrange() (Número entero de rango y paso arbitrarios)

randrange(start, stop, step)
La función de este módulo aleatorio devuelve un elemento seleccionado al azar entre los siguientes elementos.
range(start, stop, step)

Al igual que con range(), los argumentos inicio y paso pueden omitirse. Si se omiten, start=0 y step=1.

import random

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

print(random.randrange(10))
# 5

El argumento paso puede establecerse para generar un entero aleatorio par o impar, o un entero aleatorio que sea múltiplo de tres.

Por ejemplo, si el inicio es par y el paso=2, sólo se pueden obtener aleatoriamente enteros pares en el rango.

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

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

random.randint() (Un número entero en cualquier rango)

randint(a, b)
La función de este módulo aleatorio devuelve el siguiente número entero aleatorio.
a <= n <= b
randrange(a, b + 1)Equivale a esto; tenga en cuenta que el valor de b también se incluye en el rango.

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

Generar una lista con números aleatorios como elementos

En esta sección, explicaremos cómo utilizar el módulo random de la biblioteca estándar para generar una lista con números aleatorios como elementos.

Lista de números aleatorios con coma flotante

Para generar una lista cuyos elementos son números aleatorios de punto flotante, combine las funciones random() y uniform() con la notación de comprensión de listas.

import random

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

En el ejemplo anterior, se utiliza range(), pero también es posible utilizar listas y tuplas para el número de elementos deseado. Para más detalles sobre las comprensiones de listas, consulte el siguiente artículo.

Lista de números aleatorios int enteros

Cuando se genera una lista cuyos elementos son números aleatorios enteros, la combinación de las funciones anteriores randange() y randint() con la notación de comprensión de la lista puede dar lugar a valores duplicados.

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

Si quieres hacer una secuencia aleatoria de enteros sin duplicar, extrae los elementos de range() con un rango arbitrario usando 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]

Para más información sobre random.sample(), consulte el siguiente artículo.

Inicializar el generador de números aleatorios (fijar la semilla de números aleatorios)

Dando un número entero arbitrario a la función seed() del módulo random, la semilla de números aleatorios puede ser fijada y el generador de números aleatorios puede ser inicializado.

Tras la inicialización con la misma semilla, el valor aleatorio se genera siempre de la misma 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