Tu viens de rejoindre LinkLine, une entreprise de communications de premier plan qui s'efforce de garantir des connexions fiables pour tout le monde. L'équipe doit relever un grand défi : les utilisateurs soumettent des numéros de téléphone dans toutes sortes de formats, avec des tirets, des espaces, des points, des parenthèses et même des préfixes. Certains numéros sont valides, tandis que d'autres sont impossibles à utiliser.
Ta mission est de transformer ce chaos en ordre. Tu vas nettoyer les numéros valides et les mettre en forme comme il se doit pour qu'ils puissent servir dans le système. En même temps, tu vas repérer et écarter les entrées non valides.
Le bon fonctionnement des activités de LinkLine dépend de ta capacité à séparer ce qui est utile de ce qui ne l'est pas. Es-tu prêt à relever le défi et à faire en sorte que les connexions continuent de fonctionner sans accroc ?
Nettoie les numéros de téléphone pour pouvoir leur envoyer des SMS.
Le Plan de numérotation nord-américain (NANP) est un système de numérotation téléphonique utilisé par de nombreux pays d'Amérique du Nord, comme les États-Unis, le Canada ou les Bermudes.
Tous les pays du NANP partagent le même indicatif téléphonique international : 1.
Les numéros NANP sont des numéros à dix chiffres composés d'un code de zone de numérotation de trois chiffres, communément appelé area code, suivi d'un numéro local de sept chiffres. Les trois premiers chiffres du numéro local représentent le code de central, suivis du numéro unique à quatre chiffres qui est le numéro d'abonné.
Le format s'écrit généralement ainsi
NXX NXX-XXXX
où N est un chiffre de 2 à 9 et X un chiffre de 0 à 9.
Il arrive aussi qu'ils soient précédés de l'indicatif du pays (noté 1 ou +1).
Ta tâche est de nettoyer des numéros de téléphone au format différent en supprimant la ponctuation et l'indicatif du pays s'il est présent.
Par exemple, les entrées
+1 (613)-995-0253613-995-02531 613 995 0253613.995.0253doivent toutes produire le résultat
6139950253
Remarque : comme cet exercice ne traite que des numéros de téléphone utilisés dans les pays du NANP, seul 1 est considéré comme un indicatif de pays valide.
Il est parfois nécessaire de lever une exception. Dans ce cas, tu dois toujours inclure un message d'erreur explicite qui indique l'origine de l'erreur. Cela rend ton code plus lisible et facilite grandement le débogage. Lorsque tu sais que l'erreur sera d'un type bien précis, tu peux choisir de lever l'un des types d'erreur intégrés, mais tu dois quand même y joindre un message explicite.
Cet exercice demande en particulier d'utiliser l'instruction raise pour « lever » plusieurs ValueErrors si l'on passe au constructeur de la classe PhoneNumber() un numéro qui n'est pas un numéro de téléphone valide. Cela couvre les cas où l'indicatif régional ou le code du central sont invalides, où le numéro a trop (ou pas assez) de chiffres, et où l'entrée contient de la ponctuation ou des lettres. Les tests ne réussiront que si tu fais à la fois raise de l'exception et si tu y ajoutes un message.
Pour lever une ValueError avec un message, écris ce message comme argument du type d'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")
Inscris-toi sur Exercism pour apprendre et maîtriser Python avec 17 concepts146 exercices, et un vrai mentorat humain, le tout gratuitement.