Juntaste-te à LinkLine, uma empresa líder de comunicações que trabalha para garantir ligações fiáveis a todos. A equipa enfrenta um grande desafio: os utilizadores submetem números de telefone nos mais variados formatos, com traços, espaços, pontos, parênteses e até prefixos. Alguns números são válidos, outros são impossíveis de usar.
A tua missão é transformar este caos em ordem. Vais limpar os números válidos e formatá-los de forma adequada para serem usados no sistema. Ao mesmo tempo, vais identificar e filtrar as entradas inválidas.
O sucesso das operações da LinkLine depende da tua capacidade de separar o útil do inutilizável. Estás pronto para aceitar o desafio e manter as ligações a funcionar sem problemas?
Limpa números de telefone para que se lhes possam enviar mensagens SMS.
O Plano de Numeração da América do Norte (NANP) é um sistema de numeração telefónica usado por muitos países da América do Norte, como os Estados Unidos, o Canadá ou as Bermudas.
Todos os países do NANP partilham o mesmo indicativo internacional: 1.
Os números do NANP têm dez algarismos: um código de área do Plano de Numeração com três algarismos, habitualmente conhecido apenas como código de área, seguido de um número local de sete algarismos. Os primeiros três algarismos do número local correspondem ao código da central, seguidos de um número único de quatro algarismos, o número de assinante.
O formato costuma representar-se assim
NXX NXX-XXXX
em que N é qualquer algarismo de 2 a 9 e X é qualquer algarismo de 0 a 9.
Por vezes, também têm o indicativo do país (representado por 1 ou +1) à frente.
A tua tarefa é limpar números de telefone com formatações diferentes, removendo a pontuação e o indicativo do país, caso exista.
Por exemplo, os valores de entrada
+1 (613)-995-0253613-995-02531 613 995 0253613.995.0253devem todos produzir o resultado
6139950253
Nota: Como este exercício só lida com números de telefone usados em países do NANP, só o 1 é considerado um indicativo de país válido.
Por vezes é necessário lançar uma exceção. Quando o fazes, deves incluir sempre uma mensagem de erro significativa que indique qual é a origem do erro. Isto torna o teu código mais legível e ajuda imenso na depuração. Nas situações em que sabes que a origem do erro é de um determinado tipo, podes optar por lançar um dos tipos de erro incorporados, mas deves continuar a incluir uma mensagem significativa.
Este exercício em particular exige que uses a instrução raise para "lançar" vários ValueError se o construtor da classe PhoneNumber() receber um número que não é um número de telefone válido. Isto inclui erros para quando o indicativo de área ou os códigos de central são inválidos, quando o número tem demasiados (ou poucos) algarismos e quando são fornecidos sinais de pontuação ou letras como entrada. Os testes só passam se fizeres raise da exception e incluíres uma mensagem com ela.
Para lançar um ValueErrors com uma mensagem, escreve a mensagem como argumento do 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")
Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.