import sys
class Nodo:
def __init__(self, pregunta_o_artista, es_artista=False):
self.contenido = pregunta_o_artista
self.es_artista = es_artista
self.si = None
self.no = None
def construir_arbol_inicial():
"""Crea la estructura inicial de preguntas y artistas."""
raiz = Nodo("¿Es un cantante o grupo musical?")
# Rama SI (Músicos)
música = Nodo("¿Canta principalmente en español?")
música.si = Nodo("Bad Bunny", es_artista=True)
música.no = Nodo("Taylor Swift", es_artista=True)
# Rama NO (No músicos: Actores, Pintores, etc.)
no_música = Nodo("¿Es conocido principalmente por actuar en películas?")
no_música.si = Nodo("Leonardo DiCaprio", es_artista=True)
no_música.no = Nodo("Leonardo da Vinci", es_artista=True)
raiz.si = música
raiz.no = no_música
return raiz
def obtener_respuesta_valida(pregunta):
"""Pide al usuario una respuesta clara de sí o no."""
while True:
respuesta = (
input(f"{pregunta} (s/n): ").strip().lower()
) # Corregido: .lower() es un método
if respuesta in ["s", "si", "sí"]:
return True
elif respuesta in ["n", "no"]:
return False
print("Por favor, responde con 's' para Sí o 'n' para No.")
def jugar_y_aprender(nodo_actual):
"""Recorre el árbol de preguntas y aprende nuevos artistas si falla."""
# Si llegamos a una hoja del árbol (un artista concreto)
if nodo_actual.es_artista:
es_correcto = obtener_respuesta_valida(
f"¿Estás pensando en **{nodo_actual.contenido}**?"
)
if es_correcto:
print("\n¡Adiviné! Soy genial. 😎")
else:
print("\n¡Me ganaste! No sé en quién estabas pensando. 🤯")
nuevo_artista = input("¿En qué artista estabas pensando?: ").strip()
nueva_pregunta = input(
f"Escribe una pregunta que dé como respuesta 'SÍ' para {nuevo_artista} "
f"y 'NO' para {nodo_actual.contenido}:\n> "
).strip()
# El nodo actual pasa a ser la nueva pregunta
artista_anterior = nodo_actual.contenido
nodo_actual.contenido = nueva_pregunta
nodo_actual.es_artista = False
# Se agregan los dos caminos: el nuevo artista (Sí) y el antiguo (No)
nodo_actual.si = Nodo(nuevo_artista, es_artista=True)
nodo_actual.no = Nodo(artista_anterior, es_artista=True)
print(f"\n¡Gracias! He aprendido a identificar a {nuevo_artista}.")
return
# Si todavía no es un artista, sigue haciendo preguntas
respuesta = obtener_respuesta_valida(nodo_actual.contenido)
if respuesta:
jugar_y_aprender(nodo_actual.si)
else:
jugar_y_aprender(nodo_actual.no)
def main():
print("=" * 50)
print(" ¡BIENVENIDO AL ADIVINADOR DE ARTISTAS!")
print(" Piensa en un artista y responder a mis preguntas.")
print("=" * 50)
arbol_base = construir_arbol_inicial()
while True:
print("\n--- NUEVA PARTIDA ---")
jugar_y_aprender(arbol_base)
otra_vez = obtener_respuesta_valida("\n¿Quieres jugar otra vez?")
if not otra_vez:
print("\n¡Gracias por jugar! Hasta la próxima. 👋")
break
if __name__ == "__main__":
main()
To embed this project on your website, copy the following code and paste it into your website's HTML: