Gerenciador de Contatos Inteligente
Parte da seção Logic & Flow do Journey de Python da Coddy — lição 76 de 78.
Desafio
MédioCrie uma função chamada organize_contacts que processa uma lista de dicionários de contatos para criar um banco de dados de contatos limpo.
Cada dicionário de contato na lista de entrada possui estas chaves:
name: O nome da pessoaemail: O endereço de e-mail da pessoaphone: O número de telefone da pessoa
Sua função deve:
- Remover contatos duplicados (contatos com o mesmo e-mail ou número de telefone), mantendo a primeira ocorrência
- Padronizar todos os e-mails para letras minúsculas
- Filtrar contatos com endereços de e-mail inválidos
- Filtrar contatos com números de telefone inválidos
- Retornar uma lista de dicionários de contatos limpos
Regras de validação:
- E-mail válido: Deve conter '@' e '.', e não deve conter espaços
- Telefone válido: Deve conter exatamente 10 dígitos (ignore caracteres que não sejam dígitos, como traços ou parênteses)
Para limpar os números de telefone, você deve usar o método str.isdigit() do Python para extrair apenas os dígitos numéricos dos números de telefone. Este método retorna True se um caractere for um dígito (0-9) e False caso contrário, tornando-o perfeito para filtrar caracteres que não sejam dígitos.
Exemplo de Entrada:
contacts = [
{"name": "John Doe", "email": "john@email.com", "phone": "123-456-7890"}
]Saída Esperada:
[
{"name": "John Doe", "email": "john@email.com", "phone": "1234567890"}
]Experimente você mesmo
def organize_contacts(contact_list):
# Sua solução aqui
# 1. Crie funções auxiliares para validação
# - Função para validar o formato do e-mail
# - Função para limpar e validar números de telefone
# 2. Processe cada contato
# - Limpe o e-mail (letras minúsculas) e o telefone (apenas dígitos)
# - Verifique se o e-mail e o telefone são válidos
# - Verifique se há duplicatas
# 3. Retorne a lista de contatos limpa
passTodas as lições de Logic & Flow
1Exploração de Variáveis
ConstantesAtribuição de Múltiplas VariáveisTroca de VariáveisVariáveis de Espaço ReservadoArredondar NúmerosCasting de Listas4Aplicativo de Agenda de Contatos
Exibir MenuAdicionar Contato7Conjuntos Parte 2
Operações Matemáticas Parte 1Operações Matemáticas Parte 2Revisão - Caça ao TesouroSubconjuntos e SuperconjuntosIterando sobre ConjuntosRevisão - Rastreador de Torneio10List Comprehensions Básicas
A SintaxeCriando Listas SimplesAdicionando CondiçõesUsando Agregação de DadosRecapitulação - House Of ListsRecapitulação - Elements Of Freedom13Sistema de Gerenciamento de Inventário
Visão Geral do ProjetoAdicionar Item2Dicionários Parte 1
O que é um Dicionário?Criando um DicionárioAcessando ValoresModificando DicionáriosRecapitulação - Gerenciador de Receitas5Tomada de Decisão Avançada
Operador TernárioVerificações de PertencimentoVerificações de IdentidadeErros de IndentaçãoRecapitulação - Filtro de Férias8Gerenciador de Registros de Alunos
Visão Geral do ProjetoAdicionar Aluno11Funções Avançadas
Retornando Múltiplos ValoresFunções Lambda Parte 1Funções Lambda Parte 2Desafio de Recapitulação - Lambda SortFunções Recursivas Parte 1Funções Recursivas Parte 2Recapitulação - Somar Listas Aninhadas14Funções de Ordem Superior
A Função MapA Função FilterRecapitulação - Validador de E-mailRecapitulação - Processador de Números3Dicionários Parte 2
Métodos de DicionárioDicionários AninhadosVerificando ChavesIterando em DicionáriosRecapitulação - Contador de Frequência6Conjuntos Parte 1
O que é um Conjunto?Operações BásicasMétodos de ConjuntosRecapitulação - Remover Duplicatas9Agregação de Dados Avançada
Usando SumEncontrando Mínimo e MáximoOrdenando Dados de Forma EficienteRecapitulação - Dictionary Sorter