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íaos.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.