Denna kod använder en trädstruktur för att representera förutsättningar. Det är skrivet i Python och använder en ordbok för att representera trädet. Varje nyckel är ett kursnamn, och värdet är en lista över sina förutsatta kurser. Detta möjliggör flera förutsättningar och undviker cirkulära beroenden (till en viss grad, se begränsningar nedan).
`` `python
Klassförutsättningen:
def __init __ (själv):
self.tree ={}
def add_course (self, course_name, förutsättningar =ingen):
"" "Lägger till en kurs till det förutsättningen träd." "" "
Om förutsättningar är inga:
Förutsättningar =[]
self.tree [course_name] =förutsättningar
def add_prerequisite (self, course_name, förutsättning_course):
"" "Lägger till en förutsättning till en kurs." "" "
om kurs_namn inte i self.tree:
self.add_course (cure_name) # Skapa kurs om det inte finns
self.tree [court_name] .append (förutsättning_course)
DEF CHECK_PRERE -FRÅGOR (SELF, CURROW_NAME, Accpared_Courses):
"" "Kontrollerar om en student har slutfört förutsättningarna för en viss kurs." "" "
om kurs_namn inte i self.tree:
Return True # kurs finns inte, så inga förordningar
Förutsättningar =self.tree [court_name]
För förutsättningar i förutsättningar:
Om Prereq inte är i slutförda_courses:
returnera falskt
returnera
def get_all_courses (själv):
"" "Returnerar en lista över alla kurser i systemet." "" "
returlista (self.tree.keys ())
def print_tree (self):
"" "Skriver ut det förutsättningen i ett användarvänligt format." "" "
För naturligtvis förutsättningar i self.tree.items ():
Om förutsättningar:
utskrift (f "{kurs}:{Förutsättningar}")
annan:
tryck (f "{kurs}:inga förutsättningar")
Exempelanvändning
PREREQ_TREE =PREREQUISITETREE ()
Lägg till kurser och förutsättningar
PREREQ_TREE.ADD_Course ("Calculus I")
PREREQ_TREE.Add_Course ("Calculus II", ["Calculus I"])
PREREQ_TREE.Add_Course ("Linear Algebra", ["Calculus I"])
Prereq_tree.Add_Course ("Differential Equations", ["Calculus II", "Linear Algebra"])
PREREQ_TREE.Add_Course ("Sannolikhet och statistik")
PREREQ_TREE.Add_Course ("Machine Learning", ["Calculus II", "Sannolikhet &statistik"])
Skriv ut trädet
prereq_tree.print_tree ()
#Checkförutsättningar
slutförd_courses =["Calculus I", "Calculus II", "Linear Algebra"]
tryck (f "\ ncan student ta differentiella ekvationer? {prereq_tree.check_prerequisites ('differentiella ekvationer', slutförda_courses)}")
Avslutad_courses =["Calculus I", "Sannolikhet &statistik"]
Tryck (F "Kan student ta maskininlärning? {PREREQ_TREE.CHECK_PREREKISITER ('MASHINE Learning', Accpared_Courses)}")
Avslutad_courses =["Calculus I", "Sannolikhet och statistik", "Linear Algebra", "Calculus II", "Differential Equations"]
Tryck (F "Kan student ta maskininlärning? {PREREQ_TREE.CHECK_PREREKISITER ('MASHINE Learning', Accpared_Courses)}")
tryck (f "\ nall kurser:{prereq_tree.get_all_courses ()}")
`` `
Begränsningar:
* cirkulära beroenden: Denna implementering upptäcker inte uttryckligen cirkulära beroenden (t.ex. A kräver B, och B kräver A). Att lägga till en kontroll för detta skulle kräva en mer komplex algoritm (som topologisk sortering).
* Felhantering: Mer robust felhantering (t.ex. för ogiltiga kursnamn) kan läggas till.
* skalbarhet: För ett mycket stort antal kurser kan en mer effektiv trädrepresentation (t.ex. att använda ett dedikerat grafbibliotek som `Networkx ') vara att föredra.
Detta förbättrade exempel ger en mer funktionell och robust grund för ett studentförutsatt förvaltningssystem. Kom ihåg att utvidga det med mer sofistikerad felhantering, inmatningsvalidering och potentiellt ett grafiskt användargränssnitt (GUI) för en mer användarvänlig upplevelse.