a la aleatorización
En nuestro día a día nos topamos con varios fenómenos diferentes que son totalmente aleatorios. El tiempo es aleatorio: claro, podemos pronosticar y predecir el tiempo, pero sólo hasta cierto punto. La desintegración radiactiva también es un proceso aleatorio interesante que carece de patrones y previsibilidad. A diferencia de las computadoras que son deterministas y funcionan de la forma en que están programadas, la naturaleza no requiere programación, condicionales o bucles. Las cosas suceden de la manera más aleatoria e impredecible, y este es el tipo de imprevisibilidad que a veces también necesitamos en nuestras computadoras y aplicaciones, como los juegos.
Necesitamos aleatoriedad e imprevisibilidad en los juegos que jugamos para no aburrirnos de los escenarios preprogramados y los desafíos predecibles. También necesitamos el elemento de aleatoriedad al simular escenarios del mundo real, probar algoritmos o generar conjuntos de datos de muestra.
En los lenguajes de programación, la aleatorización se refiere a introducir imprevisibilidad y variabilidad en la salida de la computadora. La aleatoriedad se genera en un programa a través de números aleatorios.
Existen varios métodos para generar números pseudoaleatorios. Python usa Mersenne Twister para la aleatoriedad en su módulo aleatorio. Si bien se utiliza ampliamente como generador de números pseudoaleatorios (PRNG), el Mersenne Twister tiene propiedades deterministas, lo que lo hace inseguro para ciertas tareas que requieren la seguridad como prioridad. En programación, generar un número totalmente aleatorio es bastante difícil, por lo que utilizamos el concepto de generar números pseudoaleatorios, aunque son reproducibles si se les da un valor inicial, como se puede ver más adelante.
En este artículo, exploraremos el concepto de aleatorización empleando el módulo aleatorio de Python para generar aleatoriedad en las salidas de nuestro código.
El módulo aleatorio de Python
Ahora profundicemos en el módulo aleatorio. En primer lugar, sabemos que la aleatoriedad en este módulo es generada por Mersenne Twister usando Mersenne Primes. Este módulo integrado de Python nos permite generar aleatoriedad en nuestro código de diversas formas y proporciona flexibilidad mientras trabajamos con diferentes tipos de datos. Entendamos sus funciones a través de ejemplos. Puede acceder a la documentación oficial de este módulo a través del siguiente enlace:
aleatorio: genera números pseudoaleatorios
Para utilizar el módulo aleatorio, primero debemos asegurarnos de importarlo en nuestro código:
importar aleatoriamente
Valor flotante aleatorio entre 0 y 1
La primera tarea que aprenderemos es generar un valor aleatorio entre 0 y 1, siendo 0 no inclusivo y 1 inclusivo. Esto se puede hacer con la función aleatoria().
valor_aleatorio = aleatorio.aleatorio() imprimir(valor_aleatorio)
El código anterior generará un valor flotante aleatorio entre 0 y 1. Si ejecuta el código anterior varias veces, cada vez el valor será diferente.
Valor flotante aleatorio dentro de un rango especificado
Podemos usar la función uniforme() del módulo aleatorio para generar un número aleatorio en un rango específico.
valor_aleatorio = aleatorio.uniforme(1,10) imprimir(valor_aleatorio)
Al ejecutar el código anterior varias veces, se generarían números entre el rango mencionado entre paréntesis.
Valor entero aleatorio en un rango específico
Supongamos que queremos un valor aleatorio de un dado, como se necesita en muchos juegos, podemos incluir esta característica en nuestro código usando la función randint(). Esta función genera un número entero aleatorio a diferencia de las funciones anteriores que generan un valor flotante.
valor_aleatorio = aleatorio.randint(1,6) imprimir(valor_aleatorio)
Tenga en cuenta que al ejecutar el código anterior, el 1 y el 6 se incluirán en los valores aleatorios generados.
Valor aleatorio de una lista de valores
A continuación, veremos cómo generar un valor aleatorio a partir de una lista de valores. Podemos hacer esto definiendo primero una lista de elementos de Python y luego usando la función elección() del valor aleatorio para generar un elemento aleatorio de esa lista.
Para este propósito, primero crearemos una lista y luego usaremos la función Choice() del módulo aleatorio para elegir aleatoriamente un elemento de dicha lista. Supongamos que tenemos una lista de nuestros gatos y tenemos que elegir uno para darle un regalo especial. Así es como se puede hacer esto:
mis_gatos = [“Jerry”, “Tom”, “Figaro”, “Bella”, “Simba”]
gato_elegido = aleatorio.elección(mis_gatos) imprimir(gato_elegido)
Tenga en cuenta que el código anterior es aleatorio, lo que significa que no es necesario que se elijan todos los gatos (aunque es muy probable por mucho que ejecutemos el código), así que sí, ¡esta no es una manera justa de elegir a quién darle el regalo especial!
Además, también podemos crear una lista de opciones aleatorias usando la función elecciones(). Esta función también nos permite decidir los pesos de cada elemento de la lista, lo que significa que podemos aumentar la probabilidad de que cualquier elemento de la lista sea elegido aleatoriamente:
mi lista = [“apple”, “banana”, “cherry”, “strawberry”]
print(opciones.aleatorias(mi lista, pesos = [2, 1, 1, 1,]k = 8))
En el código anterior, le hemos dado mylist como secuencia de entrada a la función Choice(), así como los pesos de cada elemento en la lista junto con la longitud de una lista de salida con elementos seleccionados aleatoriamente que queremos. Observe la cantidad de veces que aparece la fruta “manzana” debido a su aumento de peso.
Mezclar aleatoriamente una lista de elementos
A continuación aprenderemos a mezclar aleatoriamente los elementos de una lista. Podemos usar la función shuffle() en el módulo aleatorio para este propósito.
mazo = lista(rango(1,53)) imprimir(mazo) aleatorio.shuffle(mazo) imprimir(mazo)
Muestra aleatoria y única de una lista
Supongamos que queremos obtener 5 cartas aleatorias para cada uno de los 4 jugadores. No podemos usar la función Choice() porque queremos cartas únicas del mazo, sin que se repitan cartas. Usaremos la función sample() para este propósito:
mazo = lista(rango(1,53)) cartas = aleatorio.muestra(mazo, 5) imprimir(cartas)
Entero aleatorio de un rango específico con tamaño de paso
La función randrange() se puede utilizar para elegir aleatoriamente un número de un rango específico donde se definen los valores de inicio y parada y los pasos.
número_aleatorio = aleatorio.randrange(0,10,2) print(número_aleatorio)
El bloque anterior producirá los números del 0 al 8, ya que 10 no es inclusivo y hemos definido 2 como el tamaño del paso.
Valor de la semilla
Una característica interesante del módulo aleatorio en Python es la función semilla(). Este valor inicial se utiliza como punto de partida para la generación de números aleatorios y es una característica importante para rastrear la reproducibilidad y el patrón. Siempre que usamos el valor aleatorio para generar un número aleatorio, en realidad lo estamos generando a partir de un valor inicial aleatorio, pero también podemos definir el valor inicial nosotros mismos a través de la función seed().
semilla_aleatoria(22) número_aleatorio = rango_aleatorio(0,10,2) imprimir(número_aleatorio)
El código anterior siempre generará el número aleatorio ‘2’ debido a un valor inicial definido ’22’. Si le damos al valor inicial ’55’, le dará ‘0’ una y otra vez.
Aplicaciones del Módulo Aleatorio
Aunque hay más funciones en el módulo aleatorio y muchas más implementaciones, las funciones anteriores son algunas de las más utilizadas. El módulo aleatorio de Python se puede utilizar de varias maneras, principalmente en juegos y simulaciones del mundo real. Podemos usar el módulo aleatorio en juegos que impliquen lanzar dados como se exploró anteriormente, en un juego de lanzamiento de moneda e incluso como generador de contraseñas aleatorias. ¡También podemos simular el juego Piedra, Papel, Tijera con el módulo aleatorio con un poco de condicionales y bucles!