Juego de adivinar números en Python

Actualizado el: 11/07/2026
Tempo de leitura: 3 minutos
Jogo de adivinhação de números desenvolvido com Python

Un juego de adivinar números es un proyecto pequeño pero muy completo para practicar valores aleatorios, bucles, condiciones, funciones, validación de entradas y estado de una partida. El ordenador elige un número secreto y el jugador recibe pistas hasta acertar o quedarse sin intentos.

En esta guía construiremos un juego de adivinar números en Python con niveles de dificultad, control de intentos, validación, repetición de partidas y una función de comparación que puede probarse de forma independiente.

Cómo funciona el juego

  1. El jugador selecciona una dificultad.
  2. El programa genera un entero secreto dentro de un rango.
  3. La persona introduce un intento.
  4. El programa valida el dato.
  5. Se muestra una pista: demasiado bajo, demasiado alto o correcto.
  6. La ronda termina al acertar o consumir los intentos.
  7. El jugador puede iniciar otra partida.

La generación del número utiliza el módulo random de Python.

Versión más sencilla

import random

secreto = random.randint(1, 100)
intento = int(input("Adivina un número del 1 al 100: "))

if intento == secreto:
    print("¡Correcto!")
elif intento < secreto:
    print("Demasiado bajo")
else:
    print("Demasiado alto")

Esta versión acepta un solo intento y termina con un error cuando el usuario escribe texto que no puede convertirse a entero.

Repetir con while

import random

secreto = random.randint(1, 100)
intento = None

while intento != secreto:
    intento = int(input("Tu intento: "))

    if intento < secreto:
        print("Demasiado bajo")
    elif intento > secreto:
        print("Demasiado alto")

print("¡Lo encontraste!")

El valor inicial None permite entrar en el bucle antes de que exista un intento real.

Validar la entrada

def leer_entero(mensaje, minimo, maximo):
    while True:
        texto = input(mensaje).strip()

        try:
            valor = int(texto)
        except ValueError:
            print("Introduce un número entero.")
            continue

        if minimo <= valor <= maximo:
            return valor

        print(f"Escribe un número entre {minimo} y {maximo}.")

La función repite la pregunta hasta recibir un entero válido dentro del intervalo.

Limitar los intentos

MAX_INTENTOS = 7

for numero_intento in range(1, MAX_INTENTOS + 1):
    restantes = MAX_INTENTOS - numero_intento
    intento = leer_entero("Tu intento: ", 1, 100)

    if intento == secreto:
        print(f"¡Correcto en {numero_intento} intentos!")
        break

    if intento < secreto:
        print("Demasiado bajo")
    else:
        print("Demasiado alto")

    print(f"Intentos restantes: {restantes}")
else:
    print(f"El número secreto era {secreto}.")

El bloque else del bucle se ejecuta solamente cuando no se produce break.

Evitar intentos repetidos

numeros_probados = set()

intento = leer_entero("Tu intento: ", 1, 100)

if intento in numeros_probados:
    print("Ya probaste ese número.")
else:
    numeros_probados.add(intento)

Un conjunto almacena valores únicos y permite comprobar repeticiones de forma clara.

Separar la lógica de las pistas

def comparar_intento(intento, secreto):
    if intento < secreto:
        return "bajo"

    if intento > secreto:
        return "alto"

    return "correcto"

La función no lee ni imprime nada, por lo que es fácil de probar.

Añadir niveles de dificultad

DIFICULTADES = {
    "facil": {"maximo": 50, "intentos": 10},
    "normal": {"maximo": 100, "intentos": 7},
    "dificil": {"maximo": 500, "intentos": 9},
}

La dificultad puede cambiar tanto el rango como el número de oportunidades.

Código completo

import random

DIFICULTADES = {
    "facil": {"maximo": 50, "intentos": 10},
    "normal": {"maximo": 100, "intentos": 7},
    "dificil": {"maximo": 500, "intentos": 9},
}


def leer_entero(mensaje, minimo, maximo):
    while True:
        texto = input(mensaje).strip()

        try:
            valor = int(texto)
        except ValueError:
            print("Introduce un número entero.")
            continue

        if minimo <= valor <= maximo:
            return valor

        print(f"Escribe un número entre {minimo} y {maximo}.")


def elegir_dificultad():
    while True:
        print("Niveles: facil, normal, dificil")
        opcion = input("Dificultad: ").strip().lower()

        if opcion in DIFICULTADES:
            return opcion

        print("Elige facil, normal o dificil.")


def comparar_intento(intento, secreto):
    if intento < secreto:
        return "bajo"
    if intento > secreto:
        return "alto"
    return "correcto"


def jugar_ronda(generador=None):
    generador = generador or random.Random()
    dificultad = elegir_dificultad()
    ajustes = DIFICULTADES[dificultad]
    maximo = ajustes["maximo"]
    max_intentos = ajustes["intentos"]
    secreto = generador.randint(1, maximo)

    probados = set()
    intento_numero = 0

    print(f"Elegí un número entre 1 y {maximo}.")

    while intento_numero < max_intentos:
        intento = leer_entero("Tu intento: ", 1, maximo)

        if intento in probados:
            print("Ya probaste ese número.")
            continue

        probados.add(intento)
        intento_numero += 1
        resultado = comparar_intento(intento, secreto)

        if resultado == "correcto":
            print(f"¡Correcto! Usaste {intento_numero} intentos.")
            return True

        restantes = max_intentos - intento_numero
        print(f"Demasiado {resultado}. Quedan {restantes} intentos.")

    print(f"Sin intentos. El número era {secreto}.")
    return False


def quiere_repetir():
    while True:
        respuesta = input("¿Jugar otra vez? [s/n]: ").strip().lower()

        if respuesta in {"s", "si", "sí"}:
            return True
        if respuesta in {"n", "no"}:
            return False

        print("Escribe s o n.")


def main():
    print("Juego de adivinar números")

    while True:
        jugar_ronda()

        if not quiere_repetir():
            print("¡Gracias por jugar!")
            break


if __name__ == "__main__":
    main()

Probar la función de comparación

from juego_adivinar import comparar_intento


def test_comparar_intento():
    assert comparar_intento(3, 8) == "bajo"
    assert comparar_intento(10, 8) == "alto"
    assert comparar_intento(8, 8) == "correcto"

La guía de Pytest para principiantes explica cómo ejecutar estas pruebas.

Errores frecuentes

  • Generar un nuevo secreto dentro del bucle de intentos.
  • Olvidar que input() devuelve texto.
  • Contar entradas inválidas o repetidas como intentos.
  • Crear un bucle sin condición real de salida.
  • Colocar todo el programa en el nivel global.
  • Mostrar accidentalmente el número secreto.

Ideas para ampliar el proyecto

  • Calcular una puntuación según los intentos restantes.
  • Guardar récords en JSON.
  • Añadir pistas de “más cerca” y “más lejos”.
  • Crear un modo para dos jugadores.
  • Hacer una versión gráfica con Turtle.
  • Aceptar la dificultad mediante argumentos de terminal.

Conclusión

Un juego de adivinar números en Python enseña varios fundamentos en un proyecto compacto: generación aleatoria, validación, bucles, funciones, conjuntos y pruebas. Una vez que la versión básica funcione, añade mejoras de una en una para mantener el código comprensible.

Lectura relacionada

El control de intentos repetidos resulta más claro cuando conoces bien los conjuntos en Python.

Documentación oficial

Consulta la documentación de Python sobre el módulo random y la referencia de la función input(), las dos piezas centrales de la interacción del juego.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Criptografia e segurança de dados em Python
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear un generador de contraseñas seguro en Python

    Crea un generador de contraseñas seguro en Python con secrets, reglas configurables, CLI, validación, passphrases y pruebas.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Jogo da forca para iniciantes desenvolvido com Python
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear un juego del ahorcado en Python

    Crea un juego del ahorcado en Python con palabras aleatorias, validación, letras repetidas, vidas, dibujos ASCII, pistas y opción de

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026
    Quiz interativo no terminal desenvolvido com Python
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear un quiz en Python para la terminal

    Crea un quiz en Python para la terminal con preguntas, validación, puntuación, respuestas mezcladas, repetición, JSON y pruebas.

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026
    Desenhos para iniciantes usando Turtle em Python
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Dibujar con Turtle en Python: guía completa

    Aprende a dibujar con Turtle en Python: movimientos, figuras, colores, eventos del teclado y un proyecto interactivo completo.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026