Αναδιαμόρφωσε έναν αλγόριθμο δημιουργίας δέντρου.
Ορισμένα διαδικτυακά φόρουμ έχουν διάταξη δέντρου, οπότε οι δημοσιεύσεις παρουσιάζονται ως δέντρο. Ωστόσο, οι δημοσιεύσεις συνήθως αποθηκεύονται σε μια βάση δεδομένων ως ένα μη ταξινομημένο σύνολο καταγραφών. Έτσι, όταν παρουσιάζονται οι δημοσιεύσεις στον χρήστη, η δομή του δέντρου πρέπει να ανακατασκευαστεί.
Η δουλειά σου θα είναι να αναδιαμορφώσεις έναν κώδικα που λειτουργεί αλλά είναι αργός και άσχημος, ο οποίος υλοποιεί τη λογική δημιουργίας δέντρου για ιδιαίτερα αφηρημένες καταγραφές. Οι καταγραφές περιέχουν μόνο έναν αριθμό ID και έναν αριθμό ID γονέα. Ο αριθμός ID είναι πάντα μεταξύ 0 (συμπεριλαμβανομένου) και του μήκους της λίστας καταγραφών (μη συμπεριλαμβανομένου). Όλες οι καταγραφές έχουν ID γονέα μικρότερο από το δικό τους ID, εκτός από την καταγραφή ρίζα, της οποίας το ID γονέα είναι ίσο με το δικό της ID.
Ένα παράδειγμα δέντρου:
root (ID: 0, parent ID: 0)
|-- child1 (ID: 1, parent ID: 0)
| |-- grandchild1 (ID: 2, parent ID: 1)
| +-- grandchild2 (ID: 4, parent ID: 1)
+-- child2 (ID: 3, parent ID: 0)
| +-- grandchild3 (ID: 6, parent ID: 3)
+-- child3 (ID: 5, parent ID: 0)
Μερικές φορές είναι απαραίτητο να πετάξεις μια εξαίρεση. Όταν το κάνεις αυτό, θα πρέπει πάντα να συμπεριλαμβάνεις ένα μήνυμα σφάλματος με νόημα για να δείξεις ποια είναι η πηγή του σφάλματος. Αυτό κάνει τον κώδικα σου πιο ευανάγνωστο και βοηθά σημαντικά στο debugging. Για περιπτώσεις όπου γνωρίζεις ότι η πηγή του σφάλματος θα είναι κάποιου συγκεκριμένου τύπου, μπορείς να επιλέξεις να πετάξεις έναν από τους ενσωματωμένους τύπους σφαλμάτων, αλλά θα πρέπει ακόμα να συμπεριλαμβάνεις ένα μήνυμα με νόημα.
Αυτή η συγκεκριμένη άσκηση απαιτεί να αναδιαμορφώσεις τον τρόπο/το σημείο όπου χρησιμοποιείται η εντολή raise για να "πετάξεις" ένα ValueError για μη έγκυρη είσοδο δέντρου. Τα tests θα περάσουν μόνο αν ο κώδικας τόσο κάνει raise την κατάλληλη exception όσο και περιλαμβάνει ένα κατάλληλο μήνυμα μαζί της.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.