random: números, elecciones y muestras en Python

Actualizado el: 20/08/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

    Documento y bandeja de entrada que representan buzones de correo con mailbox en Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    mailbox en Python: buzones de correo

    Aprende mailbox en Python para leer, crear y migrar Maildir, mbox y MH con locking, flags, mensajes y manejo seguro

    Ler mais

    Tempo de leitura: 5 minutos
    12/08/2026
    Editor de texto que representa formato con textwrap en Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    textwrap en Python: formatea textos

    Aprende textwrap en Python para dividir, rellenar, acortar, indentar y quitar sangrías con control de ancho, espacios y palabras largas.

    Ler mais

    Tempo de leitura: 5 minutos
    10/08/2026
    Carpeta y lupa que representan filtros de nombres con fnmatch en Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    fnmatch en Python: filtra nombres de archivos

    Aprende fnmatch en Python para filtrar nombres de archivos con comodines, controlar mayúsculas, excluir patrones y distinguir glob de regex.

    Ler mais

    Tempo de leitura: 5 minutos
    10/08/2026
    Monitor con datos binarios que representa arrays numéricos compactos en Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    array en Python: números compactos

    Aprende array en Python para almacenar números compactos, usar archivos binarios, byte order, memoryview y buffers seguros.

    Ler mais

    Tempo de leitura: 5 minutos
    10/08/2026
    Círculo cromático que representa conversiones RGB, HSV y HLS con colorsys en Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    colorsys en Python: RGB, HSV y HLS

    Aprende colorsys en Python para convertir colores entre RGB, HSV, HLS y YIQ, crear paletas y evitar errores de escala

    Ler mais

    Tempo de leitura: 5 minutos
    09/08/2026
    Icono de configuración que representa archivos plist con plistlib en Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    plistlib: lee y escribe archivos plist

    Aprende plistlib en Python para leer y escribir archivos plist XML y binarios, validar datos y manejar fechas, bytes y

    Ler mais

    Tempo de leitura: 6 minutos
    08/08/2026