Você entrou na LinkLine, uma empresa de comunicações líder de mercado que trabalha para garantir conexões confiáveis para todo mundo. A equipe enfrenta um grande desafio: os usuários enviam números de telefone nos mais diversos formatos, como traços, espaços, pontos, parênteses e até prefixos. Alguns números são válidos, enquanto outros são impossíveis de usar.
Sua missão é transformar esse caos em ordem. Você vai limpar os números válidos, formatando-os adequadamente para uso no sistema. Ao mesmo tempo, você vai identificar e filtrar as entradas inválidas.
O sucesso das operações da LinkLine depende da sua capacidade de separar o útil do inútil. Você topa encarar o desafio e manter as conexões funcionando sem problemas?
Limpe os números de telefone para que seja possível enviar mensagens SMS para eles.
O Plano de Numeração Norte-Americano (NANP) é um sistema de numeração telefônica usado por vários países da América do Norte, como Estados Unidos, Canadá e Bermudas.
Todos os países do NANP compartilham o mesmo código de país internacional: 1.
Os números do NANP são números de dez dígitos compostos por um código de área de três dígitos, mais conhecido como area code, seguido de um número local de sete dígitos. Os três primeiros dígitos do número local representam o código de central, seguidos pelo número único de quatro dígitos, que é o número do assinante.
O formato costuma ser representado assim:
NXX NXX-XXXX
em que N é qualquer dígito de 2 a 9 e X é qualquer dígito de 0 a 9.
Às vezes, eles também vêm precedidos do código do país (representado por 1 ou +1).
Sua tarefa é limpar números de telefone com formatações diferentes, removendo a pontuação e o código do país, se houver.
Por exemplo, as entradas
+1 (613)-995-0253613-995-02531 613 995 0253613.995.0253devem todas produzir a saída
6139950253
Observação: Como este exercício trata apenas de números de telefone usados em países do NANP, apenas 1 é considerado um código de país válido.
Às vezes é preciso lançar uma exceção. Quando você faz isso, deve sempre incluir uma mensagem de erro significativa para indicar qual é a origem do erro. Isso deixa seu código mais legível e ajuda bastante na depuração. Em situações em que você sabe que a origem do erro será de um determinado tipo, pode escolher lançar um dos tipos de erro internos, mas ainda assim deve incluir uma mensagem significativa.
Este exercício em particular pede que você use a instrução raise para "lançar" vários ValueErrors quando o construtor da classe PhoneNumber() receber um número que não seja um número de telefone válido. Isso inclui erros para quando o código de área ou os códigos de central são inválidos, quando o número tem dígitos demais (ou de menos) e quando a entrada tem pontuação ou letras. Os testes só passam se você fizer o raise da exception e incluir uma mensagem junto com ela.
Para lançar um ValueError com uma mensagem, escreva a mensagem como argumento do tipo da 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")
Crie sua conta no Exercism para aprender e dominar Python com 17 conceitos146 exercícios e mentoria humana de verdade, tudo de graça.