Skip to content

Commit 92ec7e2

Browse files
authored
Merge pull request mouredev#5679 from MelonConYogurt/main
Add files via upload
2 parents 0ed9137 + 6b28498 commit 92ec7e2

File tree

1 file changed

+163
-0
lines changed

1 file changed

+163
-0
lines changed
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
class Arbol:
2+
def __init__(self)-> list:
3+
self.data = []
4+
5+
def nueva_persona(self, nombre: str, pareja: str = None, hijos: list[str] = None) -> bool:
6+
try:
7+
if self.verificar_existencia(nombre):
8+
print(f"Error: La persona con el nombre '{nombre}' ya existe.")
9+
return False
10+
11+
if pareja == nombre:
12+
print("La pareja debe ser diferente a tu mismo nombre")
13+
return False
14+
elif self.verificar_pareja(pareja) >= 1:
15+
print(f"Error: La pareja '{pareja}' ya está asociada a más de una persona.")
16+
return False
17+
18+
if hijos:
19+
for hijo in hijos:
20+
if hijo == nombre or hijo == pareja:
21+
print("Tu mismo o tu pareja no puede ser tu hijo")
22+
return False
23+
if self.verificar_hijos(hijos):
24+
print(f"Error: Uno o más hijos ya existen en el sistema.")
25+
return False
26+
27+
persona = {
28+
"id": len(self.data),
29+
"nombre": nombre,
30+
"pareja": pareja if pareja else "",
31+
"hijos": hijos if hijos else []
32+
}
33+
34+
self.data.append(persona)
35+
36+
print(f"Persona agregada al árbol familiar:\n\n"
37+
f"ID: {persona['id']}\n"
38+
f"Nombre: {nombre}\n"
39+
f"Pareja: {pareja if pareja else 'N/A'}\n"
40+
f"Hijos: {', '.join(hijos) if hijos else 'Ninguno'}\n")
41+
42+
return True
43+
except Exception as e:
44+
print(f"Error al agregar la persona: {e}")
45+
return False
46+
47+
def verificar_existencia(self, nombre: str) -> bool:
48+
for person in self.data:
49+
if person["nombre"] == nombre:
50+
return True
51+
return False
52+
53+
def verificar_pareja(self, nombre: str) -> int:
54+
numero_coincidencias = 0
55+
for person in self.data:
56+
if person["pareja"] == nombre:
57+
numero_coincidencias += 1
58+
return numero_coincidencias
59+
60+
def verificar_hijos(self, hijos: list[str]) -> bool:
61+
numero_coincidencias = 0
62+
for hijo in hijos:
63+
for person in self.data:
64+
if hijo in person["hijos"]:
65+
numero_coincidencias += 1
66+
if numero_coincidencias >= 2:
67+
print(f"El hijo '{hijo}' ya tiene sus dos padres")
68+
return True
69+
70+
numero_coincidencias = 0
71+
return False
72+
73+
def eliminar_persona(self, nombre: str) -> bool:
74+
try:
75+
persona_a_eliminar = next((person for person in self.data if person["nombre"] == nombre), None)
76+
if persona_a_eliminar:
77+
self.data.remove(persona_a_eliminar)
78+
print()
79+
print(f"Persona '{nombre}' eliminada del árbol familiar.")
80+
print()
81+
return True
82+
else:
83+
print(f"Error: La persona con el nombre '{nombre}' no se encuentra en el árbol.")
84+
return False
85+
except Exception as e:
86+
print(f"Error al eliminar la persona: {e}")
87+
return False
88+
89+
def editar_persona(self, nombre: str, pareja: str = None, hijos: list[str] = None) -> bool:
90+
try:
91+
persona_para_actualizar = next((person for person in self.data if person["nombre"] == nombre), None)
92+
93+
if not persona_para_actualizar:
94+
print(f"Error: La persona con el nombre '{nombre}' no se encuentra en el árbol.")
95+
return False
96+
97+
if pareja:
98+
if pareja == nombre:
99+
print("La pareja debe ser diferente a tu mismo nombre.")
100+
return False
101+
elif self.verificar_pareja(pareja) >= 1:
102+
print(f"Error: La pareja '{pareja}' ya está asociada a más de una persona.")
103+
return False
104+
105+
if hijos:
106+
persona_para_actualizar['hijos'] = []
107+
for hijo in hijos:
108+
if hijo == nombre or hijo == pareja:
109+
print("Tu mismo o tu pareja no puede ser tu hijo.")
110+
return False
111+
if self.verificar_hijos(hijos):
112+
print(f"Error: Uno o más hijos ya existen en el sistema.")
113+
return False
114+
115+
persona_para_actualizar['pareja'] = pareja if pareja else persona_para_actualizar['pareja']
116+
persona_para_actualizar['hijos'] = hijos if hijos else persona_para_actualizar['hijos']
117+
118+
print(f"Datos de la persona '{nombre}' actualizados exitosamente:")
119+
print()
120+
print(f"Pareja: {persona_para_actualizar['pareja'] if persona_para_actualizar['pareja'] else 'N/A'}")
121+
print(f"Hijos: {', '.join(persona_para_actualizar['hijos']) if persona_para_actualizar['hijos'] else 'Ninguno'}")
122+
print()
123+
124+
return True
125+
except Exception as e:
126+
print(f"Error al eliminar la persona: {e}")
127+
return False
128+
129+
def imprimir_arbol(self):
130+
print("Arbol familiar:")
131+
def buscar_padre_madre(nombre:str, hijos: list[str]):
132+
for hijo in hijos:
133+
for person in self.data:
134+
if hijo in person["hijos"] and (person["nombre"] != nombre):
135+
return person["nombre"]
136+
else:
137+
return False
138+
139+
for person in range (len(self.data)):
140+
persona = self.data[person]
141+
padres = [persona["nombre"]]
142+
pareja = persona["pareja"]
143+
hijos = persona["hijos"]
144+
encontrar_padre_madre = buscar_padre_madre(nombre=persona["nombre"], hijos = hijos )
145+
if encontrar_padre_madre:
146+
padres.append(encontrar_padre_madre)
147+
print("---"*20)
148+
print(f"Padres: {padres}\nPareja actual: {pareja}\nHijos: {hijos}")
149+
print("---"*20)
150+
151+
if __name__ == '__main__':
152+
try:
153+
ab = Arbol()
154+
ab.nueva_persona(nombre="Juan Carlos Lopera", pareja="Maria del Rosario", hijos=["Juan Carlos", "Juan Miguel"])
155+
ab.nueva_persona(nombre="Maria Camila Gonzales", pareja="Juan Fernando", hijos=["Juan Carlos", "Juan Miguel"])
156+
ab.nueva_persona(nombre="Alejandro")
157+
158+
ab.eliminar_persona("Alejandro")
159+
160+
ab.editar_persona(nombre="Juan Carlos Lopera", pareja="Ana Maria", hijos=["Juan Carlos", "Juan Miguel", "Sofia"])
161+
ab.imprimir_arbol()
162+
except Exception as e:
163+
print(f"Error: {e}")

0 commit comments

Comments
 (0)