Juego de adivinar números en Python: pistas e intentos

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

    Búsqueda en PDF con Python y RAG
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Guía PDF con Python y RAG

    Aprende a consultar PDF con Python y RAG, recuperación semántica, evaluación y seguridad.

    Ler mais

    Tempo de leitura: 7 minutos
    23/07/2026
    Integração do ChatGPT com código Python em projeto prático
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    OpenAI API con Python: integración y seguridad

    Integra la API de OpenAI con Python usando Responses API, variables de entorno, validación, reintentos, control de costes, pruebas y

    Ler mais

    Tempo de leitura: 5 minutos
    12/07/2026
    Calendário mensal gerado automaticamente com Python
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Calendario mensual en Python con calendar

    Genera un calendario mensual con Python usando calendar y datetime, valida fechas, añade eventos y exporta a TXT, HTML o

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Projeto de jogo da velha desenvolvido em Python como exercício de lógica de programação
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Tres en raya con Python: lógica y validación

    Crea un juego de tres en raya con Python usando listas, funciones, validación, detección de victoria, marcador, pruebas y una

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    texto Tkinter com uma interface gráfica dele ao lado
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Tkinter en Python: crea una app de escritorio

    Crea tu primera aplicación con Tkinter: ventanas, ttk, formularios, grid, eventos, archivos, threads, estilos y separación de lógica.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Sistema de lembretes e alarmes desenvolvido com Python
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Recordatorios con alarma en Python: datetime y sonido

    Crea recordatorios con alarma en Python usando datetime, JSON, threads, zonas horarias, sonidos, recurrencia y pruebas controladas.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026