`` `Python
Προϋποθέσεις κατηγορίας:
def __init __ (εαυτός):
self.tree ={}
def add_course (self, course_name, προϋποθέσεις =καμία):
"" "Προσθέτει μια πορεία στο προαπαιτούμενο δέντρο." ""
Εάν τα προϋποθέματα δεν είναι:
Προαπαιτούμενα =[]
self.tree [course_name] =Προαπαιτούμενα
def add_prerequisite (self, course_name, προαπαιτούμενο_Course):
"" "Προσθέτει μια προϋπόθεση σε ένα μάθημα." ""
αν το course_name όχι στο self.tree:
self.add_course (course_name) # Δημιουργία μαθήματος εάν δεν υπάρχει
self.tree [course_name] .append (Προαπαιτούμενο_Course)
def check_prerequisites (self, course_name, completted_courses):
"" "Ελέγχει εάν ένας φοιτητής έχει ολοκληρώσει τις προϋποθέσεις για ένα συγκεκριμένο μάθημα." ""
αν το course_name όχι στο self.tree:
Η επιστροφή True # Course δεν υπάρχει, οπότε δεν υπάρχουν prereqs
Προαπαιτούμενα =self.tree [course_name]
για το Prereq σε προϋποθέσεις:
Εάν το PREREQ δεν είναι σε ολοκληρωμένο_courses:
Επιστρέψτε ψευδώς
Επιστρέψτε το TRUE
def get_all_courses (self):
"" "Επιστρέφει μια λίστα με όλα τα μαθήματα στο σύστημα." ""
Λίστα επιστροφής (self.tree.keys ())
def print_tree (self):
"" "Εκτυπώνει το προαπαιτούμενο δέντρο σε μια φιλική προς το χρήστη μορφή." ""
Για μαθήματα, προϋποθέσεις στο self.tree.items ():
Εάν προϋποθέσεις:
εκτύπωση (f "{course}:{προϋποθέσεις}")
αλλού:
εκτύπωση (F "{Course}:Δεν προϋποθέσεις")
PREREQ_TREE =Προαπαιτούμενο ()
PREREQ_TREE.ADD_COURSE ("Λογισμός i")
PREREQ_TREE.ADD_COURK
prereq_tree.add_course ("Γραμμική άλγεβρα", ["Calculus I"])
prereq_tree.add_course ("Διαφορικές εξισώσεις", ["Λογισμός II", "Γραμμική άλγεβρα"]))
prereq_tree.add_course ("Πιθανότητα &Στατιστική")
prereq_tree.add_course ("Μηχανική Μάθηση", ["Λογισμός II", "Πιθανότητα &Στατιστική"]))
prereq_tree.print_tree ()
#Check Προαπαιτούμενα
completed_courses =["λογισμός i", "λογισμός II", "γραμμική άλγεβρα"]
εκτύπωση (f "\ ncan μαθητής λαμβάνει διαφορικές εξισώσεις;
completed_courses =["λογισμός i", "Πιθανότητα και στατιστική"]
εκτύπωση (F "Μπορεί ο μαθητής να πάρει μηχανική μάθηση; {prereq_tree.check_prerequisites (" Μηχανική μάθηση ", ολοκληρωμένο_courses)}")
completed_courses =["λογισμός i", "πιθανότητα &στατιστικά στοιχεία", "γραμμική άλγεβρα", "λογισμός II", "διαφορικές εξισώσεις"]
εκτύπωση (F "Μπορεί ο μαθητής να πάρει μηχανική μάθηση; {prereq_tree.check_prerequisites (" Μηχανική μάθηση ", ολοκληρωμένο_courses)}")
εκτύπωση (F "\ nall Μαθήματα:{prereq_tree.get_all_courses ()}")
`` `
Περιορισμοί:
* Κυκλικές εξαρτήσεις: Αυτή η εφαρμογή δεν ανιχνεύει ρητά κυκλικές εξαρτήσεις (π.χ. Α απαιτεί Β και Β απαιτεί Α). Η προσθήκη ελέγχου για αυτό θα απαιτούσε έναν πιο περίπλοκο αλγόριθμο (όπως η τοπολογική διαλογή).
* Χειρισμός σφαλμάτων: Θα μπορούσε να προστεθεί πιο ισχυρός χειρισμός σφαλμάτων (π.χ. για μη έγκυρα ονόματα μαθημάτων).
* Επιμελητικότητα: Για έναν πολύ μεγάλο αριθμό μαθημάτων, μπορεί να είναι προτιμότερη μια πιο αποτελεσματική αναπαράσταση δέντρων (π.χ. χρησιμοποιώντας μια ειδική βιβλιοθήκη γραφημάτων όπως το `NetworkX ').
Αυτό το βελτιωμένο παράδειγμα παρέχει ένα πιο λειτουργικό και ισχυρό θεμέλιο για ένα σύστημα διαχείρισης προαπαιτούμενων φοιτητών. Θυμηθείτε να επεκταθείτε σε αυτό με πιο εξελιγμένο χειρισμό σφαλμάτων, επικύρωση εισόδου και ενδεχομένως ένα γραφικό περιβάλλον χρήστη (GUI) για μια πιο φιλική προς το χρήστη εμπειρία.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα