Módulo Random
Este módulo random implementa generadores de números para varias distribuciones.
Enteros
Para los enteros, existe una selección uniforme dentro de un rando. Para las secuencias, existe una selección uniforme de un elemento aleatorio, una función para generar una permutación aleatoria de una lista y una función para hacer un muestreo aleatorio sin remplazo.
Reales
Para números reales, es decir los que se expresan con decimales, existen funciones para calcular distribuciones uniformes, normales, exponenciales negativas, beta, etc.
Casi todas las funciones del módulo dependen de la función básica random()
, que genera un número punto flotante aleatorio uniformemente.
El módulo random también proporciona la clase SystemRandom, la cúal usa la función del sistema a través de os.urandom()
Funciones para enteros
random.randrange(stop)
random.randrange(start, stop[, step])
Devuelve un elemento seleccionado aleatoriamente en un rango, en este caso es sobre la función range(start, stop, step)
Ejemplo:
1
print(random.randrange(0, 11, 2)) # 4
Esta función nos devolverá un número aleatorio dentro de un rango de 0 a 10 intercalados de 2 en 2.
random.randint(a, b)
Nos devuelve un número entero aleatorio es un alias de la función anterior es equivalente a randrange(a, b+1)
.
Ejemplo
1
print(random.randint(0, 10)) # 3
Esta función nos devolverá un número entero aleatorio dentro de un rango de 0 a 10.
Funciones para secuencias o iterables
random.choice(list)
Este método nos devolverá un elemento aleatorio de una secuencia o conjunto que no sea vacío. Si está la secuencia vacía nos lanzará un IndexError
Ejemplo
1 2 3
cosas = ["Piedra", "Papel", "Tijeras", "Madera", "Lata"] print(random.choice(cosas)) # Papel
Este método nos devolverá un elemento dentro del conjunto de forma aleatoria.
random.choices(list, weights=None, *, cum_weights=1, k=1)
Este método a diferencia del anterior, lleva el nombre en plural y acepta más parámetros, y puede devolver una lista de elementos según el tamaño en el parámetro k
indicado. Si está la secuencia vacía nos lanzará un IndexError
1 2 3
cosas = ["Piedra", "Papel", "Tijeras", "Madera", "Lata"] print(random.choices(cosas, k=2)) # ['Papel', 'Lata']
Tenemos una lista de cosas y usando el método
choices(lista, k=num)
hacemos que nos retorne dos elementos aleatorio en una lista.
random.shuffle(list)
Este método mezcla una secuencia o conjunto y retorna una nueva lista mezclada modificando la original. Si deseamos mezclar una secuencia inmutable podemos usar random.shuffle(list, k=len(list))
.
1
2
3
4
5
6
7
8
9
cosas = ["Piedra", "Papel", "Tijeras", "Madera", "Lata"]
random.shuffle(cosas)
print(cosas) # ['Lata', 'Papel', 'Tijeras', 'Piedra', 'Madera']
objetos = ("Piedra", "Madera", "Lata")
objetos_mezclados = random.sample(objetos, k=len(objetos))
print(objetos_mezclados) # ['Lata', 'Piedra', 'Madera']
Mi lema es