Excelente tarde,
Segue o código feito para a solução da atividade
"""Conversão de telefones (string -> int) para o cadastro de clientes da loja."""
import re
# Dados de exemplo: telefones armazenados como string, em formatos variados
clientes = [
{"nome": "Ana Souza", "telefone": "(67) 99999-8888"},
{"nome": "Carlos Lima", "telefone": "67 3421-1234"},
{"nome": "Marta Reis", "telefone": "abc"},
{"nome": "João Pinto", "telefone": ""},
]
PALAVRA_SAIR = "sair"
def limpar_telefone(texto):
"""Remove tudo que não for dígito (parênteses, espaços, hífens etc.)."""
return re.sub(r"\D", "", texto)
def telefone_valido(digitos):
"""Aceita DDD + 8 dígitos (fixo) ou DDD + 9 dígitos (celular)."""
return len(digitos) in (10, 11)
def converter_telefone(texto):
"""Converte o texto em inteiro. Levanta ValueError se for inválido."""
digitos = limpar_telefone(texto)
if not telefone_valido(digitos):
raise ValueError(f"Telefone inválido: {texto!r}")
return int(digitos)
def formatar_telefone(numero):
"""Formata o telefone (int) para exibição, ex.: (67) 99999-8888.
Retorna 'sem telefone' se o valor for None (cliente pulado).
"""
if numero is None:
return "sem telefone"
digitos = str(numero)
ddd, resto = digitos[:2], digitos[2:]
return f"({ddd}) {resto[:-4]}-{resto[-4:]}"
def solicitar_telefone(nome):
"""Pede o telefone até ser válido. Retorna None se digitar 'sair'."""
while True:
entrada = input(
f"Digite o telefone de {nome} (com DDD) ou '{PALAVRA_SAIR}' para pular: "
)
if entrada.strip().lower() == PALAVRA_SAIR:
return None
try:
return converter_telefone(entrada)
except ValueError:
print(" Valor inválido. Use DDD + número (10 ou 11 dígitos).")
def converter_cliente(cliente):
"""Devolve uma cópia do cliente com o telefone convertido para int.
Se o usuário pular, o cliente é mantido com telefone None.
"""
try:
telefone = converter_telefone(cliente["telefone"])
except ValueError:
print(f"\nTelefone de {cliente['nome']} inválido: {cliente['telefone']!r}")
telefone = solicitar_telefone(cliente["nome"])
return {**cliente, "telefone": telefone}
def converter_cadastro(lista_clientes):
"""Converte o telefone de todos os clientes da lista."""
return [converter_cliente(c) for c in lista_clientes]
def main():
cadastro = converter_cadastro(clientes)
print("\nCadastro convertido:")
for c in cadastro:
print(f" {c['nome']}: {formatar_telefone(c['telefone'])}")
pendentes = [c["nome"] for c in cadastro if c["telefone"] is None]
if pendentes:
print(f"\nClientes sem telefone (pulados): {', '.join(pendentes)}")
if __name__ == "__main__":
main()
```