Oi William, tudo bem?
É muito interessante ver sua preocupação em escrever um código mais "Pythônico". Isso demonstra que você está buscando não apenas fazer o programa funcionar, mas também utilizar o que a linguagem oferece de melhor para tornar o código mais limpo e legível.
Vou mandar algumas sugestões de como você pode otimizar e organizar melhor seu código.
Simplificando a lógica:
No Python, podemos combinar as verificações de uma forma muito direta e expressiva. No seu código atual, você usa o if/else pra dar uma resposta genérica, mas o desafio propõe mensagens de erro específicas para cada caso.
Uma forma Pythônica de lidar com isso é manter a função focada em retornar uma resposta, deixando para o programa principal a tarefa de imprimir o resultado.
Sugestões de melhoria:
- Uso de cláusulas de guarda: Em vez de aninhar condições, podemos verificar os erros primeiro e sair da função o quanto antes. Isso evita o uso excessivo de
else e deixa o fluxo mais linear. - Validação em uma linha: Se o objetivo for apenas um "Sim" ou "Não" (booleano), poderíamos usar apenas
return cpf.isdigit() and len(cpf) == 11. Mas, para mensagens detalhadas, as condicionais separadas são melhores para o usuário. - Tratamento de strings: É comum que usuários digitem o CPF com pontos ou traços. Você pode usar
.replace(".", "").replace("-", "") antes da validação para tornar seu código mais flexível.
Exemplo de código refatorado
def validador_cpf(cpf):
# verifica se há caracteres não numéricos primeiro
if not cpf.isdigit():
return "Erro: O CPF deve conter apenas números."
# verifica o tamanho exato
if len(cpf) != 11:
return "Erro: O CPF deve ter exatamente 11 dígitos."
return "CPF válido."
E no seu main.py:
from validador import validador_cpf
numero_cpf = input('Digite o seu CPF: ')
resultado = validador_cpf(numero_cpf)
print(resultado)
por que isso é mais Pythônico?
- Responsabilidade única: Sua função agora processa a informação e devolve um texto, sem se preocupar em "printar" diretamente. Isso facilita se, no futuro, você quiser usar essa mesma função em um site ou aplicativo mobile.
- Legibilidade: O código lê-se quase como uma frase em inglês, o que é um dos pilares da filosofia do Python.
- Manutenção: Se a regra do CPF mudar para 12 dígitos, você altera apenas um lugar de forma clara.
Você fez um ótimo trabalho ao separar a lógica em arquivos diferentes, essa já é uma excelente prática de organização.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!