Tutorial juego adivina el número con Python

Vamos a realizar un proyecto muy sencillo con Python, es un clásico para los que están aprendiendo o tomando sus primeros pasos a Python, recordemos que es un lenguaje altamente flexible y versátil, se puede usar para muchas, muchas cosas.

En este caso vamos a trabajar un juego sencillo en la línea de comandos para adivinar el número correcto de entre un rango predefinido.

¿Qué usaremos?

Sencillamente necesitas Python en su versión 3 de preferencia instalada en tu ordenador, pipi también para poder instalar dependencias, todo esto realmente ya lo deberías tener por defecto, si quieres un curso básico e introductorio, te recomiendo checar nuestros cursos gratuitos en Joystick, ahí tenemos uno perfecto.

Descripción del proyecto

El juego de adivinar el número es un clásico juego de adivinanzas en el que el jugador debe tratar de adivinar un número secreto generado aleatoriamente. El jugador recibirá retroalimentación sobre si el número ingresado es demasiado alto o demasiado bajo, y continuará intentando adivinar hasta que encuentre el número correcto. El objetivo es adivinar el número objetivo en la menor cantidad de intentos posible.

Iniciando

Vamos a crear una carpeta con el nombre que tú quieras, es sólo para aislar nuestro proyecto, en mi caso le llamaré tutorial.

tutorial de python

Importando

Ya con nuestra carpeta creada, como no usaremos otras dependencias o librerías extras (que deban ser instaladas) no crearé un entorno virtual, así que vamos a crear nuestro archivo llamado game.py ahí estará todo nuestro código.

Vamos a importar la biblioteca random que viene por defecto con Python, la usaremos para generar los números aleatorios:

import random

Posterior a esto ya podemos comenzar con nuestro script.

Funciones requeridas

Vamos a crear 5 funciones diferentes, para poder encapsular nuestro código y ordenarlo de forma más profesional, y mantenible como siempre:

  1. Primero vamos a crear una función para poder definir dos números personalizados, que serán el rango de números entre el cual deberemos adivinar el número.
  2. La segunda función será para obtener dichos números ingresados.
  3. Obtiene la puntuación del jugador actual con base al número de intentos.
  4. Muestra las puntuaciones que guardamos en un archivo de texto.
  5. Actualiza las puntuaciones en un archivo de texto.
# Si el usuario quiere personalizar el rango de números
def obtener_numero_personalizado():
    rango_inferior = int(input("Ingresa el rango inferior de números: "))
    rango_superior = int(input("Ingresa el rango superior de números: "))
    return rango_inferior, rango_superior

# Obtiene el número ingresado por el usuario
def obtener_numero_ingresado(rango_inferior, rango_superior):
    while True:
        try:
            numero_ingresado = int(
                input(f"Ingresa un número entre {rango_inferior} y {rango_superior}: "))
            if rango_inferior <= numero_ingresado <= rango_superior:
                return numero_ingresado
            else:
                print("El número ingresado está fuera del rango especificado.")
        except ValueError:
            print("Error: Ingresa un número válido.")

# Obtiene la puntuación del jugador actual
def obtener_puntuacion(intentos):
    if intentos <= 5:
        return "Excelente ⭐⭐⭐⭐⭐"
    elif intentos <= 10:
        return "Bueno ⭐⭐⭐⭐"
    elif intentos <= 15:
        return "Regular ⭐⭐⭐"
    else:
        return "Intenta mejorar 👍"

# Muestra las puntuaciones guardadas en el archivo de texto en la consola
def mostrar_mejores_puntajes():
    print("---- Mejores Puntajes ----")
    try:
        with open("mejores_puntajes.txt", "r") as archivo:
            puntajes = archivo.readlines()
            if not puntajes:
                print("No hay puntajes registrados.")
            else:
                for puntaje in puntajes:
                    print("👉 ", puntaje.strip(), " intentos")
    except FileNotFoundError:
        print("No hay puntajes registrados.")
    print("--------------------------")

# Actualiza las puntuaciones en el archivo de texto
def actualizar_mejores_puntajes(intentos):
    try:
        with open("mejores_puntajes.txt", "a") as archivo:
            archivo.write(f"{intentos}\n")
        print("Los mejores puntajes se han actualizado.")
    except IOError:
        print("Error al guardar los puntajes.")

Iniciando el juego

Ya con estas funciones listas, podemos movernos a la lógica del flujo del juego, vamos a iniciar saludando al usuario y preguntando si quiere personalizar los números, la llamaremos la configuración inicial:

# Configuración inicial
print("Bienvenido al juego de adivinar el número.")
opcion = input("¿Deseas utilizar un rango de números personalizado? (s/n): ")

if opcion.lower() == "s":
    rango_inferior, rango_superior = obtener_numero_personalizado()
else:
    rango_inferior, rango_superior = 1, 100

numero_objetivo = random.randint(rango_inferior, rango_superior)

Bucle del juego

Con esto listo ahora si iniciamos el bucle del juego, que se detendrá solamente hasta que el jugador gane, es decir, adivine el número correcto:

# Bucle principal del juego
intentos = 0
while True:
    numero_ingresado = obtener_numero_ingresado(rango_inferior, rango_superior)
    intentos += 1

    if numero_ingresado < numero_objetivo:
        print("El número ingresado es demasiado bajo.")
    elif numero_ingresado > numero_objetivo:
        print("El número ingresado es demasiado alto.")
    else:
        print("🎉 ¡Felicidades! Adivinaste el número correcto.")
        break

    diferencia = abs(numero_objetivo - numero_ingresado)
    if diferencia <= 10:
        print("Estás muy cerca del número correcto.")
    elif diferencia <= 20:
        print("Estás cerca del número correcto.")
    else:
        print("Estás lejos del número correcto.")

Nuestro bucle está listo en este punto, tenemos los diferentes escenarios listos para mostrar un mensaje o feedback al usuario y así sepa si su número es correcto o no, y una forma de darle una pista de forma sencilla sobre si su número está muy lejos del correcto o no.

Ya sólo nos queda ejecutar la salida del juego cuando el usuario ingresa el número correcto (adivina el número), mostraremos los mensajes de éxito, su califación, la lista de puntuaciones anteriores guardadas en un archivo de texto gracias a nuestra función que creamos:

# Mostrar puntuación y mejores puntajes
puntuacion = obtener_puntuacion(intentos)
print("¡Has completado el juego! 🥳")
print("Número de intentos:", intentos)
print("Tu puntuación:", puntuacion)

# Actualizar mejores puntajes
actualizar_mejores_puntajes(intentos)

# Mostrar mejores puntuaciones
mostrar_mejores_puntajes()

Y si ejecutamos nuestro archivo, podremos ver el juego en acción:

Y al ganar se mostraría así:

Algo muy sencillo pero interesante, trata de hacerlo todo completo, aquí abajo te dejo el código fuente completo para copiar y pegar por si quieres probar y analizar más detenidamente todo.

El proyecto del juego de Adivinar el Número en Python ofrece a los jugadores una experiencia divertida y desafiante. A través de la interacción con el jugador, el uso de funciones y la implementación de mejoras opcionales, como la personalización del rango de números y el registro de los mejores puntajes, los participantes tienen la oportunidad de aplicar y reforzar sus conocimientos en programación con Python. Este proyecto ofrece una base sólida para que los estudiantes puedan expandir y agregar más funcionalidades según sus habilidades y creatividad. ¡Diviértete jugando y desarrollando el juego de Adivinar el Número en Python!

No te olvides de unirte a nuestros cursos gratuitos para seguir aprendiendo.

Código fuente final

import random

def obtener_numero_personalizado():
    rango_inferior = int(input("Ingresa el rango inferior de números: "))
    rango_superior = int(input("Ingresa el rango superior de números: "))
    return rango_inferior, rango_superior


def obtener_numero_ingresado(rango_inferior, rango_superior):
    while True:
        try:
            numero_ingresado = int(
                input(f"Ingresa un número entre {rango_inferior} y {rango_superior}: "))
            if rango_inferior <= numero_ingresado <= rango_superior:
                return numero_ingresado
            else:
                print("El número ingresado está fuera del rango especificado.")
        except ValueError:
            print("Error: Ingresa un número válido.")


def obtener_puntuacion(intentos):
    if intentos <= 5:
        return "Excelente ⭐⭐⭐⭐⭐"
    elif intentos <= 10:
        return "Bueno ⭐⭐⭐⭐"
    elif intentos <= 15:
        return "Regular ⭐⭐⭐"
    else:
        return "Intenta mejorar 👍"


def mostrar_mejores_puntajes():
    print("---- Mejores Puntajes ----")
    try:
        with open("mejores_puntajes.txt", "r") as archivo:
            puntajes = archivo.readlines()
            if not puntajes:
                print("No hay puntajes registrados.")
            else:
                for puntaje in puntajes:
                    print("👉 ", puntaje.strip(), " intentos")
    except FileNotFoundError:
        print("No hay puntajes registrados.")
    print("--------------------------")


def actualizar_mejores_puntajes(intentos):
    try:
        with open("mejores_puntajes.txt", "a") as archivo:
            archivo.write(f"{intentos}\n")
        print("Los mejores puntajes se han actualizado.")
    except IOError:
        print("Error al guardar los puntajes.")


# Configuración inicial
print("Bienvenido al juego de adivinar el número.")
opcion = input("¿Deseas utilizar un rango de números personalizado? (s/n): ")

if opcion.lower() == "s":
    rango_inferior, rango_superior = obtener_numero_personalizado()
else:
    rango_inferior, rango_superior = 1, 100

numero_objetivo = random.randint(rango_inferior, rango_superior)

# Bucle principal del juego
intentos = 0
while True:
    numero_ingresado = obtener_numero_ingresado(rango_inferior, rango_superior)
    intentos += 1

    if numero_ingresado < numero_objetivo:
        print("El número ingresado es demasiado bajo.")
    elif numero_ingresado > numero_objetivo:
        print("El número ingresado es demasiado alto.")
    else:
        print("🎉 ¡Felicidades! Adivinaste el número correcto.")
        break

    diferencia = abs(numero_objetivo - numero_ingresado)
    if diferencia <= 10:
        print("Estás muy cerca del número correcto.")
    elif diferencia <= 20:
        print("Estás cerca del número correcto.")
    else:
        print("Estás lejos del número correcto.")

# Mostrar puntuación y mejores puntajes
puntuacion = obtener_puntuacion(intentos)
print("¡Has completado el juego! 🥳")
print("Número de intentos:", intentos)
print("Tu puntuación:", puntuacion)

# Actualizar mejores puntajes
actualizar_mejores_puntajes(intentos)

# Mostrar mejores puntuaciones
mostrar_mejores_puntajes()

¿Quieres desarrollar sistemas profesionales?

Si nos sigues desde hace tiempo o eres nuevo en la Academia y quieres apoyar nuestro trabajo, te invitamos a nuestro Pack Full Stack, contiene todos nuestros cursos avanzados y premium.

¿Nos ayudas compartiendo?

Considera suscribirte para más

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

¿Ya nos sigues?

Más Populares

Recibe Todo en Tu Inbox

Suscríbete a nuestro boletín

Sin spam, solo notificaciones de nuevos cursos y contenido de la Academia.

Destacados para ti

Relacionados