Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#34 #35 #36 #37 - Python #6139

Merged
merged 6 commits into from
Sep 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
*/
"""
import uuid
from graphviz import Digraph

#from graphviz import Digraph


class Persona:
Expand Down Expand Up @@ -75,7 +76,7 @@ def agregar_pareja(self, id_persona, id_pareja):

persona.parejas.append(pareja)
pareja.parejas.append(persona)
# Inicializa la lista de hijos para esta pareja
# Inicializa la lista de hijos para esta pareja
persona.hijos[pareja] = []
pareja.hijos[persona] = []
else:
Expand All @@ -93,10 +94,25 @@ def agregar_hijo(self, id_padre, id_madre, id_hijo):
madre.hijos[padre].append(hijo)
else:
print("Padre, madre o hijo no encontrado")

#Formato de impresión de árbol con /tab para tabular los niveles/generaciones
def imprimir_arbol(self):
set_visitados = set()

def mostrar_persona(persona: Persona, nivel=0):
identacion = "\t" * nivel
if persona.id in set_visitados:
return
else:
print(f"{identacion} - {persona.nombre} {persona.apellido}")
set_visitados.add(persona.id)
if persona.parejas:
for pareja in persona.parejas:
print(f"{identacion} Pareja: {pareja.nombre} {pareja.apellido}")
for hijo in persona.hijos.get(pareja, []):
mostrar_persona(hijo, nivel + 1)

for persona in self.personas.values():
print(persona)
mostrar_persona(persona)

def buscar_por_nombre(self, nombre):
return [persona for persona in self.personas.values() if persona.nombre.lower() == nombre.lower()]
Expand Down Expand Up @@ -138,7 +154,7 @@ def generar_arbol_grafico(self):

dot.render('arbol_genealogico_hijos', format='png', cleanup=True)
print("Árbol genealógico generado como 'arbol_genealogico_hijos.png'.")

# Añadir flecha para cada pareja
ya_conectado = set()
for persona in self.personas.values():
Expand Down Expand Up @@ -255,4 +271,4 @@ def generar_arbol_grafico(self):
arbol.imprimir_arbol()

#Imprime el arbol en png
arbol.generar_arbol_grafico()
#arbol.generar_arbol_grafico()
68 changes: 68 additions & 0 deletions Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/oriaj3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
"""
/*
* EJERCICIO:
* ¡La temporada 2 de "Los Anillos de Poder" está a punto de estrenarse!
* ¿Qué pasaría si tuvieras que encargarte de repartir los anillos
* entre las razas de la Tierra Media?
* Desarrolla un programa que se encargue de distribuirlos.
* Requisitos:
* 1. Los Elfos recibirán un número impar.
* 2. Los Enanos un número primo.
* 3. Los Hombres un número par.
* 4. Sauron siempre uno.
* Acciones:
* 1. Crea un programa que reciba el número total de anillos
* y busque una posible combinación para repartirlos.
* 2. Muestra el reparto final o el error al realizarlo.
*/
"""
def es_par(numero):
if numero%2 == 0:
return True
else:
return False

def es_primo(numero):
es_primo = True
if numero<2:
return False
for i in range(2, int(numero/2 + 1 )):
if numero % i == 0:
es_primo = False
if es_primo:
return True
else:
return False

def distribucion_anillos(anillos):
sauron = 1
anillos -= sauron
distribuciones = []
for hombres in range (2, anillos, 2):
for elfos in range (1, anillos, 2):
enanos = anillos - hombres - elfos
if enanos > 0 and es_primo(enanos):
distribuciones.append(
{
"Hombres": hombres,
"Elfos": elfos,
"Enanos": enanos,
"Saruon": sauron
}
)
if distribuciones:
return distribuciones
else:
return "No es posible repartir los anillos según las normas. "
try:
anillos_user = int(input("Introduce el número de anillos de poder a repartir: "))
distribucion_user = distribucion_anillos(anillos_user)
if isinstance(distribucion_user, list):
for index, item in enumerate(distribucion_user):
print(f"{index}. {item}")

print(f"La distribución elegida/media es: \n {distribucion_user[int(len(distribucion_user)/2)]}")
else:
print(distribucion_user)
except ValueError:
print("Introduce un número válido. ")
152 changes: 152 additions & 0 deletions Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/oriaj3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
"""
/*
* EJERCICIO:
* Cada 1 de septiembre, el Hogwarts Express parte hacia la escuela
* de programación de Hogwarts para magos y brujas del código.
* En ella, su famoso sombrero seleccionador ayuda a los programadores
* a encontrar su camino...
* Desarrolla un programa que simule el comportamiento del sombrero.
* Requisitos:
* 1. El sombrero realizará 10 preguntas para determinar la casa del alumno.
* 2. Deben existir 4 casas. Por ejemplo: Frontend, Backend, Mobile y Data.
* (Puedes elegir las que quieras)
* Acciones:
* 1. Crea un programa que solicite el nombre del alumno y realice 10
* preguntas, con cuatro posibles respuestas cada una.
* 2. Cada respuesta asigna puntos a cada una de las casas (a tu elección).
* 3. Una vez finalizado, el sombrero indica el nombre del alumno
* y a qué casa pertenecerá (resuelve el posible empate de manera aleatoria,
* pero indicándole al alumno que la decisión ha sido complicada).
*/
"""
#Introduction to the program
print("¡Bienvenido al Sombrero Seleccionador de Hogwarts para personalidades!")
print("Responde a las siguientes preguntas para descubrir a qué casa perteneces según tu personalidad.")
print("Por favor, elige la opción que mejor te describa en cada pregunta.")
print("Las opciones siempre son: A, B, C, D.")
print("Para responder, escribe la letra correspondiente y pulsa Enter.")
input("Pulsa Enter para comenzar...")

# Dictionary with the questions and answers
questions_answers = {
"¿Cómo te enfrentas a los problemas complejos?": {
"Analítico": "Divido el problema en partes y analizo cada una.",
"Creativo": "Busco soluciones fuera de lo común.",
"Pragmático": "Me concentro en resolverlo de la manera más efectiva y directa.",
"Emocional": "Sigo mis instintos para encontrar la solución."
},
"¿Qué te motiva en tu trabajo?": {
"Analítico": "Resolver problemas difíciles con lógica.",
"Creativo": "Innovar y crear nuevas ideas.",
"Pragmático": "Cumplir con las expectativas y ser eficiente.",
"Emocional": "Trabajar en algo que me apasione."
},
"¿Cómo organizas tu día?": {
"Analítico": "Creo un plan detallado y lo sigo estrictamente.",
"Creativo": "Prefiero dejar espacio para la espontaneidad.",
"Pragmático": "Me aseguro de completar las tareas esenciales primero.",
"Emocional": "Organizo mi día según mi estado de ánimo."
},
"¿Cómo manejas la presión?": {
"Analítico": "Mantengo la calma y analizo la situación lógicamente.",
"Creativo": "Encuentro formas creativas de lidiar con ella.",
"Pragmático": "Me enfoco en las prioridades y actúo con eficacia.",
"Emocional": "Me apoyo en mis emociones para superar el estrés."
},
"¿Qué prefieres hacer en tu tiempo libre?": {
"Analítico": "Resolver acertijos o problemas lógicos.",
"Creativo": "Hacer arte o actividades creativas.",
"Pragmático": "Realizar actividades prácticas y productivas.",
"Emocional": "Conectar con amigos o actividades que me hagan sentir bien."
},
"¿Cómo tomas decisiones importantes?": {
"Analítico": "Analizo todos los datos antes de decidir.",
"Creativo": "Pienso en soluciones innovadoras.",
"Pragmático": "Tomo decisiones rápidas y eficaces.",
"Emocional": "Dejo que mis emociones me guíen."
},
"¿Qué prefieres en un proyecto de grupo?": {
"Analítico": "Organizar y dividir las tareas por lógica.",
"Creativo": "Aportar ideas nuevas y creativas.",
"Pragmático": "Asegurar que el proyecto se mantenga en el camino correcto.",
"Emocional": "Motivarme a través de las emociones del equipo."
},
"¿Cómo reaccionas cuando algo no sale según lo planeado?": {
"Analítico": "Reevalúo el problema y busco una solución lógica.",
"Creativo": "Pienso en alternativas fuera de lo común.",
"Pragmático": "Busco la forma más práctica de corregirlo.",
"Emocional": "Me dejo llevar por la frustración o tristeza pero luego encuentro una forma de avanzar."
},
"¿Qué prefieres en un ambiente laboral?": {
"Analítico": "Tener claro qué hacer y cómo hacerlo.",
"Creativo": "Espacio para innovar y explorar nuevas ideas.",
"Pragmático": "Procesos organizados y eficientes.",
"Emocional": "Un ambiente en el que se valoren los sentimientos y la colaboración."
},
"¿Cómo manejas el fracaso?": {
"Analítico": "Lo analizo para aprender de los errores.",
"Creativo": "Lo uso como inspiración para pensar de manera diferente.",
"Pragmático": "Acepto el fracaso y busco la manera de corregirlo rápidamente.",
"Emocional": "Me afecta emocionalmente, pero lo uso como motivación para mejorar."
}
}

#Print the questions and answers to the user and save the answers
answers_user = []

# Lista de letras válidas
letter_index = ["A", "B", "C", "D"]

def ask_answer() -> str:
# Bucle para pedir opciones al usuario
while True:
# Solicita la entrada del usuario
option = input("Introduce una opción (A, B, C, D): ").upper()

# Comprueba si la opción es válida
if option in letter_index:
# Devuelve la opción válida
return option
else:
# Si la opción no es válida, muestra un mensaje y repite el bucle
print("Opción inválida. Inténtalo de nuevo.")

for index, (question, answers) in enumerate(questions_answers.items()):
print(f"{index + 1}. {question}")
for index, (_, answer) in enumerate(answers.items()):
print(f" - {letter_index[index]}: {answer}")
answers_user.append(ask_answer())

#Count answers
count ={
"Analítico": 0,
"Creativo": 0,
"Pragmático": 0,
"Emocional": 0
}

#Mapping the answers a, b, c, d to the personality types
count_mapping = {
"A": "Analítico",
"B": "Creativo",
"C": "Pragmático",
"D": "Emocional"
}

for answer in answers_user:
count[count_mapping[answer]] += 1

#Check if there is a tie
max_value = max(count.values())
if list(count.values()).count(max_value) > 1:
print("La decisión ha sido complicada, pero...")
else:
print("El sombrero seleccionador ha decidido que...")
print("Tu casa es:")
print(max(count, key=count.get))






Loading