Sei entrato a far parte di LinkLine, un'azienda leader nel settore delle comunicazioni che lavora per garantire connessioni affidabili a tutti. Il team deve affrontare una grande sfida: gli utenti inviano numeri di telefono in ogni tipo di formato, con trattini, spazi, punti, parentesi e perfino prefissi. Alcuni numeri sono validi, mentre altri sono impossibili da usare.
La tua missione è trasformare questo caos in ordine. Pulirai i numeri validi, formattandoli in modo appropriato per l'uso nel sistema. Allo stesso tempo, individuerai e filtrerai le voci non valide.
Il successo delle attività di LinkLine dipende dalla tua capacità di separare ciò che è utile da ciò che non è utilizzabile. Sei pronto ad accettare la sfida e a far funzionare le connessioni senza intoppi?
Ripulisci i numeri di telefono in modo da poter inviare loro messaggi SMS.
Il Piano di numerazione nordamericano (NANP) è un sistema di numerazione telefonica usato da molti paesi del Nord America, come Stati Uniti, Canada o Bermuda.
Tutti i paesi NANP condividono lo stesso prefisso internazionale: 1.
I numeri NANP sono numeri di dieci cifre composti da un codice di area di tre cifre, comunemente noto come area code, seguito da un numero locale di sette cifre. Le prime tre cifre del numero locale rappresentano l'exchange code, seguite dal numero univoco di quattro cifre che è il subscriber number.
Il formato è di solito rappresentato così:
NXX NXX-XXXX
dove N è una cifra qualsiasi da 2 a 9 e X è una cifra qualsiasi da 0 a 9.
A volte hanno anche il prefisso internazionale (rappresentato come 1 o +1) anteposto.
Il tuo compito è ripulire numeri di telefono formattati diversamente, rimuovendo la punteggiatura e il prefisso internazionale, se presente.
Ad esempio, gli input
+1 (613)-995-0253613-995-02531 613 995 0253613.995.0253dovrebbero produrre tutti lo stesso output
6139950253
Nota: questo esercizio tratta solo i numeri di telefono usati nei paesi NANP, quindi solo 1 è considerato un prefisso internazionale valido.
A volte è necessario sollevare un'eccezione. Quando lo fai, dovresti sempre includere un messaggio di errore significativo per indicare qual è l'origine dell'errore. Questo rende il codice più leggibile e aiuta notevolmente il debug. Nei casi in cui sai che l'origine dell'errore sarà di un certo tipo, puoi scegliere di sollevare uno dei tipi di errore predefiniti, ma dovresti comunque includere un messaggio significativo.
Questo esercizio in particolare richiede di usare l'istruzione raise per «sollevare» più ValueErrors se al costruttore della classe PhoneNumber() viene passato un numero che non è un numero di telefono valido. Questo include errori per i casi in cui il prefisso o i codici di centralino non sono validi, il numero ha troppe (o troppo poche) cifre, oppure vengono forniti come input punteggiatura o lettere. I test passeranno solo se sollevi l'exception con raise e includi un messaggio con essa.
Per sollevare un ValueError con un messaggio, scrivi il messaggio come argomento del tipo 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")
Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.