Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Bug no cód. do pais

Executando o código conforme aula, tem dois erros, um dos erros já foi sanado nas dúvidas anteriores, porém tem um problema no código do pais.

se executarmos o código conforme abaixo: main.py

from TelefonesBr import TelefonesBr

telefone = "11981250525"

telefone_objeto = TelefonesBr(telefone)

print(telefone_objeto)

TelefonesBr.py

import re

class TelefonesBr:
    def __init__(self, telefone):
        if self.valida_telefone(telefone):
            self.numero = telefone
        else:
            raise ValueError("Numero incorreto!")

    def __str__(self):
        return self.format_numero()

    def valida_telefone(self, telefone):
        padrao = "([0-9]{2,3})?([0-9]{2})([9]{1})?([0-9]{4,5})([0-9]{4})"
        resposta = re.findall(padrao, telefone)
        if resposta:
            return True
        else:
            return False

    def format_numero(self):
        padrao = "([0-9]{2,3})?([0-9]{2})([9]{1})?([0-9]{4,5})([0-9]{4})"
        resposta = re.search(padrao, self.numero)
        numero_formatado = f'+{resposta.group(1)}({resposta.group(2)})' \
                           f'{resposta.group(3) if resposta.group(3) != None else ""}' \
                           f'{resposta.group(4)}-{resposta.group(5)}'
        return numero_formatado

Resposta: +None(11)98125-0525

como podemos solucionar o problema do None para o código do pais tirando também o "+"??

2 respostas

Matheus,

Tenta substituir somente este trecho original do instrutor (ou crie um "format_numero2" para testar):

def format_numero(self):
    padrao = "([0-9]{2,3})?([0-9]{2})([0-9]{4,5})([0-9]{4})"
    resposta = re.search(padrao,self.numero)
    numero_formatado = "+{}({}){}-{}".format(
        resposta.group(1),
        resposta.group(2),
        resposta.group(3),
        resposta.group(4)
    )
    print(numero_formatado)

[]'s,

Fabio I.

solução!

Olá, Matheus!

Analisa a dica o Fábio que está ótima, mas dando uma contextualizada, o formato correto para se introduzir o número no mais.py, é nesse formato:

from TelefonesBr import TelefonesBr

telefone = "05511981250525"

telefone_objeto = TelefonesBr(telefone)

print(telefone_objeto)

Saida:

+055(11)98125-0525

Esse é o formato de um número do Brasil com o DD da região metropolitana de São Paulo.

Mas para termos uma saída diferente podemos usar o seguinte código no seu arquivo TelefoneBR.

import re

class TelefonesBr:
    def __init__(self, telefone):
        if self.valida_telefone(telefone):
            self.numero = telefone
        else:
            raise ValueError("Número incorreto!")

    def __str__(self):
        return self.format_numero()

    def valida_telefone(self, telefone):
        padrao = r"(\d{2,3})?(\d{2})(9\d)?(\d{4,5})(\d{4})"
        resposta = re.findall(padrao, telefone)
        if resposta:
            return True
        else:
            return False

    def format_numero(self):
        padrao = r"(\d{2,3})?(\d{2})(9\d)?(\d{4,5})(\d{4})"
        resposta = re.search(padrao, self.numero)
        
        codigo_pais = resposta.group(1) if resposta.group(1) else ""
        numero_formatado = f'({resposta.group(2)})' \
                           f'{f"{resposta.group(3)}-" if resposta.group(3) else ""}' \
                           f'{resposta.group(4)}-{resposta.group(5)}'
        return f'{codigo_pais}{numero_formatado}'

Deste modo a sáida deve ser a seguinte:

(11)98125-0525

Espero ter ajudado e reforço que em casos de dúvidas, conte sempre com o fórum da comunidade Alura! Bons estudos!

Sucesso

Um grande abraço e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software