Uso del módulo random
en Python
Este módulo, producto de años de desarrollo y optimización por parte de la comunidad Python, encapsula toda la complejidad matemática necesaria para generar números y eventos aleatorios. La belleza de este sistema radica en que nos permite acceder a funcionalidades sofisticadas sin necesidad de reinventar soluciones a problemas ya resueltos.
Documentación en línea
Puedes consultar la documentación oficial de Python para obtener información sobre el módulo y sus funciones disponibles aquí.
Importación del módulo random
Este módulo se encuentra disponible en la biblioteca estándar de Python, lo que significa que está preinstalado en nuestro sistema y listo para ser utilizado. Está ubicado en un archivo llamado random.py en nuestro sistema, y para acceder a sus funciones debemos importarlo en nuestro programa.
Por lo tanto, para utilizar las funciones del módulo random
, primero debemos importarlo en nuestro programa. La forma más común de hacerlo es mediante la instrucción import random
, que nos permite acceder a todas las funciones y características del módulo.
O bien, si solo necesitamos una función específica, podemos importarla directamente con la instrucción from random import choice
:
O bien importar varias funciones específicas del módulo random
:
¡Para recordar!
Puedes repasar los conceptos de importación de módulos en Python en nuestro material Importación de módulos en Python.
Funciones aleatorias
La implementación de operaciones aleatorias, como simular el lanzamiento de una moneda o generar números al azar dentro de un rango específico, ilustra perfectamente el principio de reutilización de código en programación.
En lugar de desarrollar nuestros propios algoritmos de generación de números aleatorios -una tarea que requeriría conocimientos avanzados de matemáticas y estadística- podemos aprovechar el trabajo previamente realizado por expertos en la materia.
Esto ejemplifica uno de los principios fundamentales en el desarrollo de software: construir sobre el trabajo de otros nos permite enfocarnos en resolver los problemas específicos de nuestro dominio, aumentando así nuestra productividad y la calidad de nuestro código.
Esta aproximación modular no solo facilita el desarrollo sino que también promueve la creación de código más robusto y mantenible, permitiéndonos concentrar nuestros esfuerzos en la lógica específica de nuestras aplicaciones.
choice(seq)
En la documentación oficial de Python, esta función se presenta formalmente como random.choice(seq)
, donde seq
representa una secuencia de elementos.
Una secuencia en Python puede manifestarse de diversas formas, siendo las más comunes las listas, tuplas o cadenas de caracteres.
La función choice(seq)
devuelve un elemento aleatorio de la secuencia seq
. Por ejemplo, si tenemos una lista de opciones, podemos elegir una de ellas al azar con random.choice(opciones)
.
La notación random.choice(seq)
que encontramos en la documentación nos revela dos componentes esenciales:
random
: el nombre del módulo que contiene la funciónchoice(seq)
: el nombre específico de la función dentro de ese módulo
Esta estructura de notación no es arbitraria; refleja la organización jerárquica de Python, donde el punto (.) actúa como un operador de acceso que nos permite alcanzar funciones específicas dentro de un módulo. Es similar a cómo en una biblioteca física navegaríamos desde la sección general hasta el libro específico que buscamos.
Ejemplo de aplicación
# Paso 1: Importar el módulo random
import random
# Paso 2: Utilizar la función choice del módulo
# Por ejemplo, para elegir un elemento de una lista:
opciones = ["manzana", "naranja", "pera"]
eleccion = random.choice(opciones)
print(eleccion)
En este ejemplo, la línea
import random
nos permite acceder a todas las funciones y características del módulorandom
. Cuando utilizamos la instrucciónimport random
en Python, estamos realizando una importación integral del módulo, lo que significa que traemos a nuestro programa todas las funcionalidades disponibles en dicho módulo. Posteriormente, utilizamosrandom.choice(opciones)
para seleccionar un elemento aleatorio de la listaopciones
.
Analicemos los componentes de este programa:
import random
importa el módulorandom
en nuestro programaopciones = ["manzana", "naranja", "pera"]
crea una lista de opcioneseleccion = random.choice(opciones)
selecciona un elemento aleatorio de la listaopciones
print(eleccion)
imprime el resultado de la selección aleatoria- Los corchetes [ ] crean una lista, que es una estructura de datos que puede contener múltiples elementos
- Las cadenas "manzana", "naranja" y "pera" son elementos individuales de la lista, separados por una coma
- Las comillas (ya sean simples o dobles) indican que estamos trabajando con cadenas de texto
- random.choice() es la función que seleccionará aleatoriamente uno de estos elementos
- Los paréntesis ( ) después de 'choice' contienen el argumento que pasamos a la función, en este caso, nuestra lista
El resultado de la ejecución fue
naranja
, ya que la funciónchoice
seleccionó aleatoriamente uno de los elementos de la listaopciones
.
Si lo ejecutamos de nuevo, obtendremos un resultado potencialmente diferente, ya que la elección es aleatoria.
En este caso, la elección fue
pera
, lo que demuestra la aleatoriedad inherente de la funciónchoice
. Pero podría haber sido manzana o incluso naranja nuevamente.
La flexibilidad de esta función nos permite trabajar con cualquier tipo de secuencia, siempre que mantengamos la sintaxis correcta de la lista y respetemos la estructura de los elementos que queremos incluir en ella. Esta versatilidad hace que random.choice()
sea una herramienta poderosa para cualquier situación donde necesitemos selección aleatoria en nuestros programas.
A continuación, exploraremos otras funciones del módulo random
que nos permiten generar números aleatorios dentro de rangos específicos y realizar mezclas aleatorias de secuencias. Puedes continuar por ahi, o explorar la tira de ejercicios aquí para practicar lo aprendido.
randint(a, b)
Vamos a explorar otra función muy útil del módulo random de Python: randint(), que nos permite generar números enteros aleatorios.
Pensemos en esto como un dado digital que podemos personalizar para que tenga la cantidad de caras que queramos.
La función randint()
necesita dos números para funcionar: un límite inferior (llamémoslo a) y un límite superior (b). Lo interesante es que randint()
incluye ambos números en las posibilidades. Por ejemplo, si escribimos randint(1, 10)
, Python podría elegir cualquier número entre 1 y 10, incluyendo tanto el 1 como el 10. Es como tener un dado de 10 caras donde cada número tiene la misma probabilidad de salir (10% en este caso).
Veamos cómo podemos crear un programa simple que genere números aleatorios:
Ejemplo de aplicación
# Paso 1: Importar el módulo random
import random
# Paso 2: Utilizar la función randint del módulo
# Por ejemplo, para generar un número aleatorio entre 1 y 10:
numero_aleatorio = random.randint(1, 10)
print(f"Tu número aleatorio es: {numero_aleatorio}")
En este ejemplo, la línea
import random
nos permite acceder a todas las funciones y características del módulorandom
. Cuando utilizamos la instrucciónimport random
en Python, estamos realizando una importación integral del módulo, lo que significa que traemos a nuestro programa todas las funcionalidades disponibles en dicho módulo. Posteriormente, utilizamosrandom.randint(1, 10)
para generar un número aleatorio entre 1 y 10.
Analicemos los componentes de este programa:
import random
importa el módulorandom
en nuestro programanumero_aleatorio = random.randint(1, 10)
genera un número aleatorio entre 1 y 10print(f"Tu número aleatorio es: {numero_aleatorio}")
imprime el resultado de la generación aleatoria
El resultado de la ejecución fue
Tu número aleatorio es: 7
, ya que la funciónrandint
generó un número aleatorio entre 1 y 10.
Si lo ejecutamos de nuevo, obtendremos un resultado potencialmente diferente, ya que la elección es aleatoria.
En este caso, el número generado fue
3
, lo que demuestra la aleatoriedad inherente de la funciónrandint
. Pero podría haber cualquies otro número dentro del rango de 1 a 10, incluso 7 nuevamente.
Este programa es similar a cuando jugamos "piensa en un número del 1 al 10", pero en lugar de que una persona elija el número, dejamos que la computadora lo haga por nosotros. La diferencia es que la computadora es completamente imparcial: cada número tiene exactamente la misma probabilidad de ser elegido.
La generación de números aleatorios en programación nos permite crear comportamientos dinámicos e impredecibles en nuestros programas. Al ejecutar random.randint(1, 10)
repetidamente, cada número del 1
al 10
tiene igual probabilidad de aparecer (10%), similar a un dado de diez caras perfectamente equilibrado.
Esta funcionalidad es fundamental para:
- Crear juegos con comportamientos impredecibles (por ejemplo, juegos de adivinanza de números)
- Simular decisiones aleatorias de personajes o elementos (por ejemplo, elegir un camino en un juego de aventuras)
- Generar variabilidad en simulaciones (por ejemplo, generar problemas matemáticos aleatorios para practicar)
- Hacer que nuestros programas sean más dinámicos (por ejemplo, elegir un color aleatorio para un elemento gráfico)
En todos estos casos, randint()
puede ayudarte a generar los números que necesitas de forma justa y aleatoria.
Python maneja la complejidad matemática detrás de la generación de números aleatorios, permitiéndonos concentrarnos en la lógica de nuestras aplicaciones. Esta capacidad de crear comportamientos no deterministas es esencial en la programación moderna, especialmente en desarrollo de juegos, simulaciones y aplicaciones que requieren elementos de variabilidad.
En lugar de comportamientos predecibles y repetitivos, la aleatoriedad nos permite crear experiencias únicas en cada ejecución de nuestro programa.
¡Para recordar!
La función randint()
es una herramienta poderosa para generar números aleatorios dentro de un rango específico, lo que nos permite simular eventos aleatorios en nuestros programas de Python.
A continuación, exploraremos otras funciones del módulo random
que nos permiten generar números aleatorios dentro de rangos específicos y realizar mezclas aleatorias de secuencias. Puedes continuar por ahi, o explorar la tira de ejercicios aquí para practicar lo aprendido.
shuffle(seq)
Vamos a explorar una función realmente interesante, shuffle()
, que nos permite mezclar elementos, por ejemplo, como si estuviéramos barajando cartas. Imagina que tienes un mazo de cartas perfectamente ordenado y quieres mezclarlo para jugar. Eso es exactamente lo que hace shuffle()
.
La función shuffle()
necesita una secuencia de elementos para funcionar, y reorganiza los elementos de esa secuencia de forma aleatoria. Por ejemplo, si tenemos una lista de cartas, podemos mezclarlas con random.shuffle(cartas)
.
Veamos cómo podemos crear un programa simple que mezcle elementos aleatoriamente:
Ejemplo de aplicación
# Paso 1: Importar el módulo random
import random
# Paso 2: Crear una lista de elementos
cartas = ["AS", "2", "3", "4", "5", "6", "7", "8", "9", "10", "JACK", "QUEEN", "KING"]
# Paso 3. Imprimir la lista de elementos antes de mezclar
print("Antes de mezclar:", cartas)
# Paso 4: Utilizar la función shuffle del módulo para mezclar los elementos
random.shuffle(cartas)
# Paso 5: Imprimir la lista de elementos mezclados
print("Después de mezclar:", cartas)
En este ejemplo, la línea
import random
nos permite acceder a todas las funciones y características del módulorandom
. Cuando utilizamos la instrucciónimport random
en Python, estamos realizando una importación integral del módulo, lo que significa que traemos a nuestro programa todas las funcionalidades disponibles en dicho módulo. Posteriormente, creamos una lista de cartas y la imprimimos antes de mezclarla. Luego, utilizamosrandom.shuffle(cartas)
para mezclar los elementos de la lista y la imprimimos nuevamente.
Analicemos los componentes de este programa:
import random
importa el módulorandom
en nuestro programacartas = ["AS", "2", "3", "4", "5", "6", "7", "8", "9", "10", "JACK", "QUEEN", "KING"]
crea una lista de cartasprint("Antes de mezclar:", cartas)
imprime la lista de cartas antes de mezclarrandom.shuffle(cartas)
mezcla los elementos de la listacartas
print("Después de mezclar:", cartas)
imprime la lista de cartas después de mezclar
Antes de mezclar: ['AS', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'JACK', 'QUEEN', 'KING']
Después de mezclar: ['QUEEN', 'KING', 'AS', '4', '2', '6', '7', '3', 'JACK', '5', '8', '9', '10']
El resultado de la ejecución muestra la lista de cartas antes y después de mezclarlas. Como puedes ver, los elementos se reorganizaron de forma aleatoria después de utilizar la función
shuffle()
. Si ejecutas el programa nuevamente, obtendrás una nueva mezcla aleatoria, ya que la funciónshuffle()
reorganiza los elementos de la lista cada vez que se ejecuta.
Este código nos muestra algo muy interesante sobre cómo funciona shuffle()
: cada carta tiene la misma probabilidad de aparecer en cualquier posición. Es como si estuviéramos barajando las cartas de verdad. Cualquier carta podría terminar en cualquier lugar del mazo.
La función shuffle()
es una herramienta poderosa para reorganizar elementos de una secuencia de forma aleatoria. Esto puede ser útil en situaciones donde necesitamos aleatorizar el orden de elementos, como ya vimos en juegos de cartas, sorteos, listas de reproducción de música, entre otros.
¡Para recordar!
Algo muy especial de shuffle()
es que funciona de manera diferente a otras funciones que hemos visto antes. En lugar de devolvernos una nueva lista con los elementos mezclados, shuffle()
modifica directamente la lista original. Es como si en lugar de darnos un nuevo mazo barajado, tomara nuestro mazo y lo mezclara en nuestras manos.
Esto es lo que llamamos en programación una función que modifica "in place" (en el lugar). Es importante entender esto porque significa que no necesitamos crear una nueva variable para guardar el resultado:
# Esto NO es necesario (y no funcionará como esperamos):
cartas_mezcladas = random.shuffle(cartas) # ❌ Incorrecto
La función shuffle()
es una herramienta poderosa para mezclar elementos de una secuencia de forma aleatoria, lo que nos permite crear comportamientos impredecibles en nuestros programas de Python.
¿Te imaginas cómo podrías usar esto para crear un juego de cartas? O incluso para mezclar cualquier tipo de lista, como preguntas para un juego de trivia o el orden de los jugadores en un torneo. ¡Las posibilidades son infinitas!
Existen otras funciones del módulo random
pero, por el momento, no vamos a profundizar en ellas.
Te invito a resolver la tira de ejercicios aquí para practicar lo aprendido, si aún no lo has hecho.