`` `Python
Clase Requisito previo:
def __init __ (self):
self.tree ={}
def add_course (self, curso_name, requisitos previos =ninguno):
"" "Agrega un curso al árbol de requisitos previos". ""
Si los requisitos previos son ninguno:
Prerrequisitos =[]
self.tree [curso_name] =requisitos previos
Def add_PerRequisite (self, curso_name, requisito previo_course):
"" "Agrega un requisito previo a un curso". ""
Si el curso_name no está en self.tree:
self.add_course (curso_name) # Crear curso si no existe
self.tree [curso_name] .Append (Prerequisito_Course)
Def check_prerequisites (self, curso_name, completado_courses):
"" "Comprueba si un estudiante ha completado los requisitos previos para un curso determinado". ""
Si el curso_name no está en self.tree:
devolver el curso # # no existe, por lo que no hay requisitos previos
Prerrequisitos =self.tree [curso_name]
Para el requisito previo en requisitos previos:
Si el previo no está en completado_courses:
devolver falso
Devolver verdadero
Def get_all_courses (self):
"" "Devuelve una lista de todos los cursos en el sistema". ""
Lista de retorno (self.tree.keys ())
Def print_tree (self):
"" "Imprime el árbol de requisitos previos en un formato fácil de usar". ""
Para el curso, requisitos previos en self.tree.items ():
Si los requisitos previos:
print (f "{curso}:{requisitos previos}")
demás:
print (f "{curso}:sin requisitos previos")
Ejemplo de uso
preReq_tree =PrequisitTeTree ()
Agregar cursos y requisitos previos
Prereq_tree.add_course ("Cálculo I")
Prereq_tree.add_course ("Cálculo II", ["Cálculo I"])
Prereq_tree.add_course ("Álgebra lineal", ["Cálculo I"])
Prereq_tree.add_course ("Ecuaciones diferenciales", ["Cálculo II", "Álgebra lineal"])
Prereq_tree.add_course ("Probabilidad y estadísticas")
Prereq_tree.add_course ("Aprendizaje automático", ["Cálculo II", "Probabilidad y estadísticas"])
Imprima el árbol
Prereq_tree.print_tree ()
#Compheck Requisitos previos
completado_courses =["Cálculo I", "Cálculo II", "Álgebra lineal"]
print (f "\ ncan Student tome ecuaciones diferenciales? {prereq_tree.check_perRequisites ('ecuaciones diferenciales', completado_courses)}")
completado_courses =["Cálculo I", "Probabilidad y estadísticas"]
print (f "¿Puede el estudiante tomar el aprendizaje automático? {Prereq_tree.check_perRequisites ('Machine Learning', Complety_courses)}")
completado_courses =["Cálculo I", "Probabilidad y estadísticas", "Álgebra lineal", "Cálculo II", "Ecuaciones diferenciales"]
print (f "¿Puede el estudiante tomar el aprendizaje automático? {Prereq_tree.check_perRequisites ('Machine Learning', Complety_courses)}")
Print (F "\ Nall Courses:{PreReq_tree.get_all_courses ()}")
`` `` ``
Limitaciones:
* Dependencias circulares: Esta implementación no detecta explícitamente dependencias circulares (por ejemplo, A requiere B y B requiere A). Agregar un control para esto requeriría un algoritmo más complejo (como la clasificación topológica).
* Manejo de errores: Se podría agregar un manejo de errores más robusto (por ejemplo, para nombres de cursos no válidos).
* escalabilidad: Para una gran cantidad de cursos, podría ser preferible una representación de árboles más eficiente (por ejemplo, usar una biblioteca de gráficos dedicada como 'NetworkX`).
Este ejemplo mejorado proporciona una base más funcional y robusta para un sistema de gestión de requisitos previos del estudiante. Recuerde expandirlo con un manejo de errores más sofisticado, validación de entrada y potencialmente una interfaz gráfica de usuario (GUI) para una experiencia más fácil de usar.