Módulo random de Python: guía completa

Actualizado el: 11/07/2026
Tempo de leitura: 4 minutos
Uso do módulo random para gerar valores aleatórios em Python

La aleatoriedad aparece en juegos, simulaciones, sorteos, pruebas y pequeños proyectos de automatización. Python incluye el módulo random en su biblioteca estándar, por lo que puedes generar números pseudoaleatorios, elegir elementos y mezclar listas sin instalar paquetes adicionales.

En esta guía aprenderás a utilizar random(), randint(), randrange(), uniform(), choice(), choices(), sample(), shuffle() y seed(). También veremos una regla importante: para contraseñas, tokens y códigos de seguridad debes utilizar secrets, no random.

Qué hace el módulo random

El módulo genera valores pseudoaleatorios. Los resultados parecen impredecibles para un usuario, pero proceden de un algoritmo determinista. Eso lo hace rápido y adecuado para juegos, ejemplos, simulaciones sencillas y datos de prueba reproducibles.

import random

La documentación oficial de random reúne todas las distribuciones y operaciones disponibles.

Generar un número decimal con random()

random.random() devuelve un número de punto flotante desde 0.0 hasta un valor menor que 1.0.

import random

valor = random.random()
print(valor)

Puedes escalarlo, aunque normalmente existen funciones más claras:

porcentaje = random.random() * 100
print(f"{porcentaje:.2f}%")

Generar enteros con randint() y randrange()

randint(a, b) incluye ambos límites. Para simular un dado:

dado = random.randint(1, 6)
print(dado)

randrange() utiliza límites similares a range(): el valor final queda excluido y puedes indicar un paso.

numero = random.randrange(10)          # de 0 a 9
multiplo = random.randrange(0, 101, 5)
print(numero, multiplo)

Este patrón es útil en un juego de adivinación con Python.

Valores decimales con uniform()

uniform(a, b) devuelve un valor decimal dentro de un intervalo.

temperatura = random.uniform(18.0, 30.0)
print(f"Temperatura simulada: {temperatura:.1f} °C")

Es apropiado para ejemplos y simulaciones básicas, pero no sustituye un modelo estadístico real.

Elegir un elemento con choice()

choice() selecciona un elemento de una secuencia no vacía.

colores = ["rojo", "verde", "azul", "amarillo"]
elegido = random.choice(colores)
print(elegido)

Si la secuencia está vacía, Python genera IndexError. Valida la lista cuando pueda no contener datos.

sample() y choices(): sin reemplazo o con reemplazo

  • sample(poblacion, k) devuelve elementos sin repetir posiciones.
  • choices(poblacion, k=k) permite repeticiones.
participantes = ["Ana", "Luis", "Marta", "Diego", "Sofía"]

equipo = random.sample(participantes, k=3)
sorteos = random.choices(participantes, k=5)

print("Equipo:", equipo)
print("Sorteos:", sorteos)

sample() genera ValueError cuando k es mayor que la población.

Elecciones con pesos

premios = ["pequeño", "mediano", "grande"]
pesos = [70, 25, 5]

resultado = random.choices(premios, weights=pesos, k=1)[0]
print(resultado)

Los pesos representan proporciones relativas y no necesitan sumar 100.

Mezclar una lista con shuffle()

shuffle() modifica la lista original y devuelve None.

cartas = ["A", "K", "Q", "J", "10"]
random.shuffle(cartas)
print(cartas)

Para conservar el orden original, crea una copia:

original = [1, 2, 3, 4, 5]
mezclada = original.copy()
random.shuffle(mezclada)

print(original)
print(mezclada)

Resultados reproducibles con seed()

Una semilla fija permite repetir una secuencia durante una clase, una depuración o una prueba.

random.seed(42)
print(random.randint(1, 100))
print(random.randint(1, 100))

La semilla sirve para reproducibilidad, no para seguridad.

Usar una instancia independiente

generador = random.Random(42)

print(generador.choice(["norte", "sur", "este", "oeste"]))
print(generador.random())

Una instancia separada evita modificar el estado global y facilita las pruebas automatizadas.

random no sirve para contraseñas ni tokens

El generador predeterminado es determinista y no está diseñado para criptografía. Para proteger cuentas o acciones sensibles, utiliza secrets.

import secrets

codigo = secrets.randbelow(900000) + 100000
token = secrets.token_urlsafe(32)

print(codigo)
print(token)

Consulta la documentación oficial de secrets para conocer las funciones seguras.

Proyecto práctico: crear grupos equilibrados

import random


def crear_grupos(nombres, cantidad, semilla=None):
    if cantidad < 1:
        raise ValueError("La cantidad debe ser al menos 1")

    if cantidad > len(nombres):
        raise ValueError("No puede haber más grupos que personas")

    generador = random.Random(semilla)
    mezclados = list(nombres)
    generador.shuffle(mezclados)

    grupos = [[] for _ in range(cantidad)]

    for indice, nombre in enumerate(mezclados):
        grupos[indice % cantidad].append(nombre)

    return grupos


personas = ["Ana", "Luis", "Marta", "Diego", "Sofía", "Pablo"]

for numero, grupo in enumerate(crear_grupos(personas, 3, semilla=7), start=1):
    print(f"Grupo {numero}: {', '.join(grupo)}")

El proyecto combina listas, copia de datos, mezcla, módulo y enumerate().

Errores frecuentes

  • Usar randint(0, len(lista)) como índice y obtener un valor fuera del rango.
  • Esperar que shuffle() devuelva una lista nueva.
  • Pedir en sample() más elementos de los disponibles.
  • Utilizar random para claves, sesiones o enlaces de recuperación.
  • Dejar una semilla fija en producción sin querer.
  • Suponer que un resultado aleatorio representa correctamente un fenómeno real.

Preguntas frecuentes

¿Necesito instalar random?

No. Forma parte de la biblioteca estándar de Python.

¿randint() incluye el límite superior?

Sí. randint(1, 6) puede devolver 1 y 6.

¿Cómo elijo ganadores sin repetir?

Utiliza random.sample(participantes, k=cantidad).

¿Qué debo usar para tokens seguros?

Utiliza secrets.token_urlsafe(), secrets.token_hex() u otra función del módulo secrets.

Conclusión

El módulo random de Python ofrece herramientas sencillas para números, selecciones y mezclas. Usa randint() para enteros, choice() para un elemento, sample() para selecciones únicas, choices() para resultados repetidos o ponderados y shuffle() para cambiar el orden de una lista.

Utiliza semillas cuando la reproducibilidad sea útil y cambia a secrets en cualquier situación relacionada con seguridad.

Lecturas relacionadas

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Barra de progresso com tqdm para scripts Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    tqdm en Python: barras de progreso para scripts

    Añade barras de progreso a tus scripts con tqdm en Python: bucles, archivos, pandas, descargas, actualización manual y opciones útiles.

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026