Generar números aleatorios en Python

 

Generar números aleatorios en Python es relativamente sencillo haciendo uso de modulo random. A continuación, veremos varias opciones para generarlos.

Un número aleatorio es un resultado de una combinación variable al azar especificada por una función de distribución. En los ordenadores personales es fácil simular la generación de números aleatorios, mediante mecanismos de generación de números seudoaleatorios, que, sin ser aleatorios, porque siguen una fórmula, lo aparentan.

Módulo random en Python

Para utilizar el módulo random en un programa debemos importarlo de la siguiente forma:

import random

Si solo necesitamos una función, podemos importar solo esa función:

from random import randint
# Por ejemplo si solo vamos a utilizar randint

También podemos importar varias de la misma forma pero indicando las distintas funciones separadas por comas:

from random import randint, uniform

Este módulo tiene muchas opciones, pero en este post veremos las más interesantes para generar números aleatorios en Python:

  • random.seed(a=None, version=2)
    Establece una semilla para la generación, la usaremos posteriormente.

    random.seed(9)
  • random.randrange(stop)
    Devuelve un número entre 0 y stop – 1.

    #Estableciendo la semilla anterior
    print(random.randrange(10)) # Salida: 7
  • random.randint(a, b)
    Generar un número entre un rango definido por a y b.

    # Estableciendo la semilla anterior
    print(random.randint(50,100)) # Salida: 59
  • random.random()
    Genera un número real entre [0.0, 1.0).

    # Estableciendo la semilla anterior
    print(random.random())  # Salida: 0.46300735781502145
  • random.uniform(a, b)
    Mismo resultado que la función anterior pero entre [a,b).

    # Estableciendo la semilla anterior
    print(random.uniform(3.1, 5.9))  # Salida: 4.39642060188206
  • random.choice(seq)
    Devuelve un elemento de la secuencia recibida generado de forma aleatoria.

    # Estableciendo la semilla anterior
    lista = [5,9,0,4,13]
    print(random.choice(lista))  # Salida: 4

Existen muchas más operaciones que podemos hacer gracias a este módulo, sobre todo para el ámbito estadístico.

Lista de números aleatorios entre un rango en Python

En el punto anterior hemos visto como generar un número aleatorio entero entre un rango de forma sencilla, pero también podemos generar una lista de números aleatorios entre un rango en Python con una sola línea. Lo podemos hacer con el siguiente código:

def random_list(n,inicio,fin):
    """ Genera una lista de n numeros aleatorios entre [inicio,fin]"""
    return [random.randint(inicio, fin) for _ in range(n)]

Para ejecutar la función basta con invocarla introduciendo la cantidad de números que se quiera generar y el rango en el cual deben estar los números a generar.

print(random_list(12,0,5))  

Dependiendo la ejecución saldrán unos números u otros.

Generar números aleatorios con semilla en Python

Establecer una semilla a la hora de generar números aleatorios en Python nos permite que podamos obtener siempre el mismo número, aunque lo generemos en distintos momentos o en distintos ordenadores.

Si ejecutáis los ejemplos anteriores con la misma semilla que yo, podréis observar cómo generáis los mismos resultados.

¿ Y cómo generamos un conjunto de números de la misma forma?

Pues cambiando la semilla con lógica, es decir, si creamos un algoritmo que vaya cambiando la semilla siempre de la misma forma, podemos conseguir el mismo conjunto de números aleatorios en distintas ejecuciones. Una posible implementación sería la siguiente:

def random_seed_list(n):
    """ Genera una lista de n numeros aleatorios entre [0,10)
    estableciendo la semilla de forma incremental """
    list = []
    for i in range(0,n):
        random.seed(i)
        list.append(random.randrange(10))
    return list

Para probar la función podemos realizar las siguientes ejecuciones:

print(random_seed_list(10))  
# Salida: [6, 2, 0, 3, 3, 9, 9, 5, 3, 7]
print(random_seed_list(11))  
# Salida: [6, 2, 0, 3, 3, 9, 9, 5, 3, 7, 9]
print(random_seed_list(12))  
# Salida: [6, 2, 0, 3, 3, 9, 9, 5, 3, 7, 9, 7]

Como se puede observar siempre se generan los mismos números, pero en cada llamada se genera un número más.

Este algoritmo se puede modificar para generar aleatoriamente lo que se necesite, pero la idea para generar siempre los mismos resultados es establecer la semilla de manera lógica.

 

 

Deja un comentario