Tracks
/
Python
Python
/
Ejercicios
/
Número de teléfono
Número de teléfono

Número de teléfono

Fácil

Introducción

Te uniste a LinkLine, una empresa líder en comunicaciones que trabaja para garantizar conexiones confiables para todos. El equipo enfrenta un gran desafío: los usuarios envían números de teléfono en todo tipo de formatos, como guiones, espacios, puntos, paréntesis e incluso prefijos. Algunos números son válidos, mientras que otros son imposibles de usar.

Tu misión es convertir este caos en orden. Limpiarás los números válidos y les darás el formato adecuado para usarlos en el sistema. Al mismo tiempo, identificarás y filtrarás las entradas que no sean válidas.

El éxito de las operaciones de LinkLine depende de tu capacidad para separar lo útil de lo inútil. ¿Estás listo para asumir el desafío y mantener las conexiones funcionando sin problemas?

Instrucciones

Limpia números de teléfono para que se les puedan enviar mensajes SMS.

El Plan de Numeración de América del Norte (NANP) es un sistema de numeración telefónica que usan muchos países de América del Norte, como Estados Unidos, Canadá o Bermudas. Todos los países del NANP comparten el mismo código de país internacional: 1.

Los números del NANP son números de diez dígitos que constan de un código de tres dígitos del plan de numeración, conocido comúnmente como código de área, seguido de un número local de siete dígitos. Los primeros tres dígitos del número local representan el código de central, seguido del número único de cuatro dígitos, que es el número de abonado.

El formato se representa normalmente como

NXX NXX-XXXX

donde N es cualquier dígito del 2 al 9 y X es cualquier dígito del 0 al 9.

A veces también llevan antepuesto el código de país (representado como 1 o +1).

Tu tarea es limpiar números de teléfono con distintos formatos, eliminando la puntuación y el código de país, si está presente.

Por ejemplo, los siguientes números

  • +1 (613)-995-0253
  • 613-995-0253
  • 1 613 995 0253
  • 613.995.0253

deben producir todos la salida

6139950253

Nota: Como este ejercicio solo trata números de teléfono usados en países del NANP, solo el 1 se considera un código de país válido.

Mensajes de excepción

A veces es necesario lanzar una excepción. Cuando lo hagas, siempre debes incluir un mensaje de error significativo que indique cuál es el origen del error. Esto hace que tu código sea más legible y ayuda mucho a la hora de depurar. En los casos en los que sabes que el origen del error será de un tipo determinado, puedes elegir lanzar uno de los tipos de error integrados, pero aun así debes incluir un mensaje significativo.

Este ejercicio en particular requiere que uses la sentencia raise para «lanzar» varios ValueErrors si al constructor de la clase PhoneNumber() se le pasa un número que no es un número de teléfono válido. Esto incluye errores para cuando el código de área o el código de central son inválidos, cuando el número tiene demasiados dígitos (o muy pocos), y para cuando se dan signos de puntuación o letras como entrada. Las pruebas solo pasarán si usas raise con la exception y además incluyes un mensaje con ella.

Para lanzar un ValueError con un mensaje, escribe el mensaje como argumento 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")
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Python Exercism

¿Todo listo para empezar Número de teléfono?

Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.