Desarrolla un Juego de Adivinanza de Números en Python: Código Completo y Explicación

Clasificado en Informática

Escrito el en español con un tamaño de 6,96 KB

Este documento presenta el código fuente de un sencillo pero entretenido juego de adivinanza de números, implementado en Python. A través de este proyecto, podrás comprender conceptos fundamentales de programación como bucles, condicionales, manejo de entrada del usuario y generación de números aleatorios. El juego permite al usuario seleccionar un nivel de dificultad y luego intentar adivinar un número secreto con cifras únicas.

Estructura del Código

El juego está organizado en varias secciones lógicas, desde la inicialización de variables hasta el bucle principal del juego y la validación de la entrada del usuario.

1. Importaciones y Configuración Inicial

Se importan los módulos necesarios y se establece la variable principal para controlar el flujo del juego.


import random
import os

seguirjuego = True

2. Bucle Principal del Juego y Selección de Nivel

El juego se ejecuta en un bucle continuo hasta que el usuario decide salir. Al inicio de cada partida, se limpia la consola y se solicita al jugador que elija un nivel de dificultad.


while seguirjuego == True:
    os.system('cls')

    opcion = False
    while opcion == False:
        nivel = str(input("Elige el nivel de juego: \n 1 (Novato) \n 2 (Normal) \n 3 (Avanzado)\n"))
        niveles = ["Novato: números de 3 cifras.", "Normal: números de 4 cifras.", "Avanzado: números de 5 cifras."]
#aquí es donde tengo que generar el número secreto acorde al nivel deseado.
        if nivel == "1":
            cifras = 3
            opcion = True
        elif nivel == "2":
            cifras = 4
            opcion = True
        elif nivel == "3":
            cifras = 5
            opcion = True
        else:
            print("Opción incorrecta. Por favor, elige un número del 1 al 3.")
            opcion = False
    nivelint = int(nivel)
    print("Has elegido el nivel:", niveles[nivelint - 1])
    print("No hay límite en el número de intentos.")

3. Generación del Número Secreto

Esta sección se encarga de crear el número secreto. Es crucial que las cifras sean únicas y que el número tenga la cantidad de dígitos correspondiente al nivel seleccionado.


    valores = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]

    numero_secreto = ""
    while len(numero_secreto) < cifras:
        escogecifra = random.choice(valores)
        while escogecifra in numero_secreto:
            escogecifra = random.choice(valores)
        numero_secreto = numero_secreto + escogecifra

4. Bucle de Adivinanza y Validación de Entrada

Aquí es donde el jugador intenta adivinar el número. El código valida que la entrada del usuario cumpla con los requisitos: la cantidad correcta de cifras, que no haya cifras repetidas y que solo contenga dígitos válidos.


    intento = 0 # Contador de intentos
    valido = False # Valdrá True solo cuando se acierte el número secreto.
    while valido == False:
        intento = intento + 1
        print("Intento número:", intento)
        tamaño = False # Para controlar que los intentos tengan las cifras acordadas
        repetidas = False
        novalid = False # Variable para controlar caracteres no válidos
        while tamaño == False or repetidas == False or novalid == False:
            b = str(input("Introduce un número: "))
            c = str(b) # Se mantiene 'c' para consistencia con el código original

            # Validación de tamaño
            if len(c) == cifras:
                tamaño = True
            else:
                print("El número debe contener", cifras, "cifras.")
                tamaño = False

            # Validación de cifras repetidas
            numdistin = []
            cantidad = []
            for i in (c):
                if i not in numdistin:
                    numdistin.append(i)
                    numero = c.count(i)
                    cantidad.append(numero)
            if len(cantidad) > 0 and (max(cantidad)) > 1: # Añadido len(cantidad) > 0 para evitar error en lista vacía
                print("El número no debe contener cifras repetidas.")
                repetidas = False
            else:
                repetidas = True

            # Validación de caracteres no numéricos
            cuentanovalid = 0
            for alfa in (c):
                if alfa not in valores:
                    cuentanovalid += 1
            if cuentanovalid < 1:
                novalid = True
            else:
                print("Ese número tiene", cuentanovalid, "caracteres no permitidos.")

5. Comprobación de Aciertos y Coincidencias

Una vez que la entrada del usuario es válida, el juego compara el número introducido con el número secreto para determinar cuántas cifras son correctas y cuántas están en la posición correcta.


        coincidencias = 0
        aciertos = 0
        for i in range(cifras):
            if numero_secreto[i] == c[i]:
                aciertos = aciertos + 1
            if c[i] in numero_secreto:
                coincidencias = coincidencias + 1 # Cifras que están, aunque no en su sitio.
        print("Hay", coincidencias, "cifras que están en el número secreto.")
        print("Has tenido", aciertos, "aciertos.")
        if coincidencias == aciertos == cifras:
            print("¡Felicidades! Conseguiste averiguar el número secreto en", intento, "intentos.")
            valido = True

6. Opción para Continuar Jugando

Al finalizar una partida, el jugador tiene la opción de iniciar una nueva o salir del juego.


    menuseguir = False
    while menuseguir == False:
        jugar = str(input("¿Quieres seguir jugando? \n s (Sí) \n n (No)\n"))
        if jugar == "s":
            menuseguir = True
            seguirjuego = True
        elif jugar == "n":
            seguirjuego = False
            menuseguir = True
        else:
            print("Opción incorrecta. Por favor, introduce 's' o 'n'.")

7. Mensaje Final

Un mensaje de despedida se muestra cuando el jugador decide terminar el juego.


print("¡Que tengas un buen día!")
input() # Mantiene la consola abierta hasta que el usuario presione Enter.

Consideraciones Adicionales

  • El código utiliza os.system('cls') para limpiar la consola, lo cual es específico de sistemas Windows. Para sistemas Unix/Linux/macOS, se usaría os.system('clear').
  • La validación de entrada del usuario es robusta, asegurando que el número introducido cumpla con los criterios del juego (longitud, cifras únicas, solo dígitos).
  • El juego proporciona retroalimentación clara sobre el número de coincidencias y aciertos, lo que ayuda al jugador a deducir el número secreto.

Este proyecto es ideal para quienes están aprendiendo Python y desean aplicar conceptos básicos en un programa interactivo y funcional.

Entradas relacionadas: