Η καλύτερή σου φίλη, η Marta, πρόσφατα έπιασε τη δουλειά των ονείρων της, δουλεύοντας με τις συλλογές ενός τοπικού μουσείου ιστορίας. Γνωρίζοντας το ενδιαφέρον σου για τον προγραμματισμό, σου εκμυστηρεύεται ένα ζήτημα στη δουλειά για μια επερχόμενη έκθεση πάνω στην ιστορία των υπολογιστών. Το τμήμα μαθηματικών ενός τοπικού πανεπιστημίου είχε δωρίσει αρκετά κουτιά με ιστορικές εκτυπώσεις, αλλά δεδομένης της κακής κατάστασης των εγγράφων, πάρθηκε η απόφαση να ψηφιοποιηθεί το κείμενο. Ωστόσο, ο παλιός εκτυπωτής του πανεπιστημίου είχε κάποιες ιδιαιτερότητες στον τρόπο που αναπαριστούσε το κείμενο, και η φίλη σου θα χρειαζόταν τη βοήθειά σου για να εξαγάγει με επιτυχία τα δεδομένα.
Η Οπτική Αναγνώριση Χαρακτήρων, ή OCR, είναι λογισμικό που μετατρέπει εικόνες κειμένου σε κείμενο αναγνώσιμο από μηχανή.
Δεδομένου ενός πλέγματος χαρακτήρων που αναπαριστά κάποια ψηφία, μετέτρεψε το πλέγμα σε μια συμβολοσειρά ψηφίων.
Αν το πλέγμα έχει πολλές σειρές κελιών, οι σειρές θα πρέπει να χωρίζονται στην έξοδο με ένα ",".
"|"), κάτω παύλες ("_") και κενά (" ")."?" για αυτόν τον χαρακτήρα.Η παρακάτω είσοδος (χωρίς τα σχόλια) μετατρέπεται σε "1234567890".
_ _ _ _ _ _ _ _ #
| _| _||_||_ |_ ||_||_|| | # Decimal numbers.
||_ _| | _||_| ||_| _||_| #
# The fourth line is always blank,
Η παρακάτω είσοδος μετατρέπεται σε "123,456,789".
_ _
| _| _|
||_ _|
_ _
|_||_ |_
| _||_|
_ _ _
||_||_|
||_| _|
Μερικές φορές είναι απαραίτητο να πετάξεις μια εξαίρεση. Όταν το κάνεις αυτό, θα πρέπει πάντα να συμπεριλαμβάνεις ένα ουσιαστικό μήνυμα σφάλματος που να δείχνει ποια είναι η πηγή του σφάλματος. Αυτό κάνει τον κώδικά σου πιο ευανάγνωστο και βοηθά σημαντικά στο debugging. Σε περιπτώσεις όπου ξέρεις ότι η πηγή του σφάλματος θα είναι κάποιου συγκεκριμένου τύπου, μπορείς να επιλέξεις να πετάξεις έναν από τους ενσωματωμένους τύπους σφαλμάτων, αλλά και πάλι θα πρέπει να συμπεριλάβεις ένα ουσιαστικό μήνυμα.
Η συγκεκριμένη άσκηση απαιτεί να χρησιμοποιήσεις την εντολή raise για να "πετάξεις" ένα ValueError όταν η συνάρτηση convert() λαμβάνει μια συμβολοσειρά που δεν είναι έγκυρος αριθμός OCR. Τα τεστ θα περάσουν μόνο αν και κάνεις raise το exception και συμπεριλάβεις ένα μήνυμα μαζί του.
Για να πετάξεις ένα ValueError με μήνυμα, γράψε το μήνυμα ως όρισμα στον τύπο exception:
# when the rows aren't multiples of 4
raise ValueError("Number of input lines is not a multiple of four")
# when the columns aren't multiples of 3
raise ValueError("Number of input columns is not a multiple of three")
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.