Έχεις μπει στη LinkLine, μια κορυφαία εταιρεία επικοινωνιών που εργάζεται για να διασφαλίζει αξιόπιστες συνδέσεις για όλους. Η ομάδα αντιμετωπίζει μια μεγάλη πρόκληση: οι χρήστες υποβάλλουν αριθμούς τηλεφώνου σε κάθε λογής μορφή, με παύλες, κενά, τελείες, παρενθέσεις και ακόμη και προθέματα. Κάποιοι αριθμοί είναι έγκυροι, ενώ άλλοι είναι αδύνατο να χρησιμοποιηθούν.
Η αποστολή σου είναι να μετατρέψεις αυτό το χάος σε τάξη. Θα καθαρίζεις τους έγκυρους αριθμούς και θα τους μορφοποιείς κατάλληλα για χρήση στο σύστημα. Παράλληλα, θα εντοπίζεις και θα φιλτράρεις όποιες μη έγκυρες καταχωρήσεις.
Η επιτυχία των λειτουργιών της LinkLine εξαρτάται από την ικανότητά σου να ξεχωρίζεις τα χρήσιμα από τα άχρηστα. Είσαι έτοιμος να αναλάβεις την πρόκληση και να κρατήσεις τις συνδέσεις να λειτουργούν ομαλά;
Καθάρισε τους αριθμούς τηλεφώνου, ώστε να μπορούν να τους σταλούν μηνύματα SMS.
Το North American Numbering Plan (NANP) είναι ένα σύστημα αρίθμησης τηλεφώνων που χρησιμοποιείται από πολλές χώρες της Βόρειας Αμερικής, όπως οι Ηνωμένες Πολιτείες, ο Καναδάς ή οι Βερμούδες.
Όλες οι χώρες του NANP μοιράζονται τον ίδιο διεθνή κωδικό χώρας: 1.
Οι αριθμοί NANP είναι δεκαψήφιοι αριθμοί που αποτελούνται από έναν τριψήφιο κωδικό περιοχής του σχεδίου αρίθμησης, γνωστό συνήθως ως κωδικός περιοχής, και ακολουθεί ένας επταψήφιος τοπικός αριθμός. Τα τρία πρώτα ψηφία του τοπικού αριθμού αντιπροσωπεύουν τον κωδικό τηλεφωνικού κέντρου, και ακολουθεί ο μοναδικός τετραψήφιος αριθμός, που είναι ο αριθμός συνδρομητή.
Η μορφή συνήθως αναπαρίσταται ως
NXX NXX-XXXX
όπου το N είναι οποιοδήποτε ψηφίο από το 2 έως το 9 και το X είναι οποιοδήποτε ψηφίο από το 0 έως το 9.
Μερικές φορές έχουν επίσης ως πρόθεμα τον κωδικό χώρας (που αναπαρίσταται ως 1 ή +1).
Η αποστολή σου είναι να καθαρίσεις διαφορετικά μορφοποιημένους αριθμούς τηλεφώνου, αφαιρώντας τη στίξη και τον κωδικό χώρας, αν υπάρχει.
Για παράδειγμα, οι είσοδοι
+1 (613)-995-0253613-995-02531 613 995 0253613.995.0253θα πρέπει όλες να παράγουν την έξοδο
6139950253
Σημείωση: Επειδή αυτή η άσκηση ασχολείται μόνο με αριθμούς τηλεφώνου που χρησιμοποιούνται σε χώρες του NANP, μόνο το 1 θεωρείται έγκυρος κωδικός χώρας.
Μερικές φορές είναι απαραίτητο να πετάξεις μια εξαίρεση. Όταν το κάνεις αυτό, θα πρέπει πάντα να συμπεριλαμβάνεις ένα κατατοπιστικό μήνυμα σφάλματος που να δείχνει ποια είναι η πηγή του σφάλματος. Αυτό κάνει τον κώδικά σου πιο ευανάγνωστο και βοηθάει σημαντικά στο debugging. Σε περιπτώσεις όπου ξέρεις ότι η πηγή του σφάλματος θα είναι συγκεκριμένου τύπου, μπορείς να επιλέξεις να πετάξεις έναν από τους ενσωματωμένους τύπους σφαλμάτων, αλλά θα πρέπει και πάλι να συμπεριλάβεις ένα κατατοπιστικό μήνυμα.
Αυτή η συγκεκριμένη άσκηση απαιτεί να χρησιμοποιήσεις την εντολή raise για να "πετάξεις" πολλαπλά ValueErrors αν στον κατασκευαστή της κλάσης PhoneNumber() περαστεί ένας αριθμός που δεν είναι έγκυρος αριθμός τηλεφώνου. Αυτό περιλαμβάνει σφάλματα για όταν ο κωδικός περιοχής ή ο κωδικός κέντρου δεν είναι έγκυροι, όταν ο αριθμός έχει πάρα πολλά (ή πολύ λίγα) ψηφία, και για όταν δίνονται σημεία στίξης ή γράμματα ως είσοδος. Οι δοκιμές θα περάσουν μόνο αν και πετάξεις την exception με raise και συμπεριλάβεις ένα μήνυμα μαζί της.
Για να πετάξεις ένα ValueError με μήνυμα, γράψε το μήνυμα ως όρισμα στον τύπο exception:
# if a phone number has less than 10 digits.
raise ValueError("must not be fewer than 10 digits")
# if a phone number has more than 11 digits.
raise ValueError("must not be greater than 11 digits")
# if a phone number has 11 digits, but starts with a number other than 1.
raise ValueError("11 digits must start with 1")
# if a phone number has an exchange code that starts with 0.
raise ValueError("exchange code cannot start with zero")
# if a phone number has an exchange code that starts with 1.
raise ValueError("exchange code cannot start with one")
# if a phone number has an area code that starts with 0.
raise ValueError("area code cannot start with zero")
# if a phone number has an area code that starts with 1.
raise ValueError("area code cannot start with one")
# if a phone number has punctuation in place of some digits.
raise ValueError("punctuations not permitted")
# if a phone number has letters in place of some digits.
raise ValueError("letters not permitted")
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.