Deze code gebruikt een boomstructuur om de vereisten weer te geven. Het is geschreven in Python en gebruikt een woordenboek om de boom weer te geven. Elke sleutel is een cursusnaam en de waarde is een lijst met de vereiste cursussen. Dit maakt meerdere vereisten mogelijk en vermijdt circulaire afhankelijkheden (tot op zekere hoogte, zie de beperkingen hieronder).
```python
klasse PrerequisiteTree:
def __init__(zelf):
zelf.boom ={}
def add_course(self, cursusnaam, vereisten=Geen):
"""Voegt een cursus toe aan de vereistenboom."""
als de vereisten Geen zijn:
vereisten =[]
self.tree[cursusnaam] =vereisten
def add_prerequisite(self, cursusnaam, vereiste_cursus):
"""Voegt een voorwaarde toe aan een cursus."""
als cursusnaam niet in self.tree staat:
self.add_course(course_name) # maak een cursus aan als deze nog niet bestaat
self.tree[cursusnaam].append(vereiste_cursus)
def check_prerequisites(self, cursusnaam, voltooide_cursussen):
"""Controleert of een student aan de vereisten voor een bepaalde cursus heeft voldaan."""
als cursusnaam niet in self.tree staat:
return True # Cursus bestaat niet, dus geen vereisten
vereisten =self.tree[cursusnaam]
voor prereq in vereisten:
indien vereiste niet in voltooide_cursussen:
terugkeer Vals
terugkeer Waar
def get_all_courses(zelf):
"""Retourneert een lijst met alle cursussen in het systeem."""
retourlijst(self.tree.keys())
def print_tree(zelf):
"""Drukt de vereistenboom af in een gebruiksvriendelijk formaat."""
uiteraard vereisten in self.tree.items():
als vereisten:
print(f"{cursus}:{vereisten}")
anders:
print(f"{cursus}:Geen vereisten")
Voorbeeldgebruik
prereq_tree =PrerequisiteTree()
Cursussen en vereisten toevoegen
prereq_tree.add_course("Rekening I")
prereq_tree.add_course("Rekening II", ["Rekening I"])
prereq_tree.add_course("Lineaire algebra", ["Rekening I"])
prereq_tree.add_course("Differentiële vergelijkingen", ["Rekening II", "Lineaire algebra"])
prereq_tree.add_course("Kanswaarschijnlijkheid &Statistiek")
prereq_tree.add_course("Machine Learning", ["Calculus II", "Kansen &Statistieken"])
Druk de boom af
prereq_tree.print_tree()
#Controleer de vereisten
voltooid_courses =["Rekening I", "Rekening II", "Lineaire algebra"]
print(f"\nKan de leerling differentiaalvergelijkingen maken? {prereq_tree.check_prerequisites('Differentiële vergelijkingen', voltooide_cursussen)}")
voltooid_courses =["Calculus I", "Kansrekening &Statistiek"]
print(f"Kan een leerling Machine Learning volgen? {prereq_tree.check_prerequisites('Machine Learning', voltooide_cursussen)}")
voltooid_courses =["Rekening I", "Kansrekening en statistiek", "Lineaire algebra", "Rekening II", "Differentiële vergelijkingen"]
print(f"Kan een leerling Machine Learning volgen? {prereq_tree.check_prerequisites('Machine Learning', voltooide_cursussen)}")
print(f"\nAlle cursussen:{prereq_tree.get_all_courses()}")
```
Beperkingen:
* Circulaire afhankelijkheden: Deze implementatie detecteert niet expliciet circulaire afhankelijkheden (A vereist bijvoorbeeld B en B vereist A). Het toevoegen van een controle hiervoor zou een complexer algoritme vereisen (zoals topologische sortering).
* Foutafhandeling: Er zou een robuustere foutafhandeling (bijvoorbeeld voor ongeldige cursusnamen) kunnen worden toegevoegd.
* Schaalbaarheid: Voor een zeer groot aantal cursussen kan een efficiëntere boomweergave (bijvoorbeeld het gebruik van een speciale grafiekenbibliotheek zoals `NetworkX`) de voorkeur verdienen.
Dit verbeterde voorbeeld biedt een functionelere en robuustere basis voor een systeem voor het beheren van de basisvoorwaarden voor studenten. Vergeet niet om het uit te breiden met meer geavanceerde foutafhandeling, invoervalidatie en mogelijk een grafische gebruikersinterface (GUI) voor een gebruiksvriendelijkere ervaring. |