Skip to content

Commit

Permalink
Merge pull request #6139 from oriaj3/main
Browse files Browse the repository at this point in the history
#34 #35 #36 #37 - Python
  • Loading branch information
Roswell468 authored Sep 16, 2024
2 parents 8df4e7e + 16c95db commit 273cad1
Show file tree
Hide file tree
Showing 4 changed files with 476 additions and 6 deletions.
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

0 comments on commit 273cad1

Please sign in to comment.