Oi, João Victor! Tudo bem?
No desenvolvimento, o termo "sênior" muitas vezes está ligado a escolher a lógica que melhor previne erros e cobre todos os cenários possíveis (os famosos edge cases).
Analisando a sua solução e a do instrutor, existem pontos importantes sobre como as Expressões Regulares (Regex) funcionam no Python.
re.search vs re.fullmatch:
No seu código, você utilizou o re.search com o padrão r'[a-zA-Z]'.
- O que o seu código faz: O
re.search varre a string e retorna verdadeiro se encontrar pelo menos uma letra em qualquer lugar do texto. - O problema: Se o usuário digitar
maria123, o programa dirá que o nome é válido, pois ele encontrou as letras de "maria", mesmo que existam números e o nome comece com letra minúscula.
Já a solução do instrutor utiliza o re.fullmatch:
- O que ele faz: Exige que a string inteira, do começo ao fim, siga exatamente o padrão.
- A regex
r'[A-Z][a-z]*': Garante que a primeira letra seja maiúscula e que o restante sejam apenas letras minúsculas.
Pra elevar o nível do código, precisamos lidar com nomes compostos (como "Ana Maria") ou nomes com acentuação, que o padrão [a-z] não reconhece por padrão.
Uma estrutura que lida melhor com a validação seria:
import re
def validar_nome(nome):
# O padrão abaixo permite:
# 1. Primeira letra maiúscula
# 2. Letras subsequentes (incluindo acentos)
# 3. Espaços para nomes compostos
padrao = r'^[A-ZÀ-Ú][a-zà-ú]*(\s[A-ZÀ-Ú][a-zà-ú]*)*$'
if re.fullmatch(padrao, nome):
return True
return False
nome_cliente = input("Digite o nome do cliente para validação: ").strip()
if validar_nome(nome_cliente):
print("Nome válido!")
else:
print("Nome inválido!")
Por que essa estrutura é interessante?
- Uso de funções: Organizar a lógica em uma função (
validar_nome) torna o código limpo e fácil de reutilizar. - Método .strip(): Remove espaços em branco acidentais no início ou fim da digitação, evitando que um espaço bobo invalide o nome.
- Regex abrangente: O padrão que sugeri acima aceita nomes como "João" ou "Ana Maria", que são comuns e seriam barrados pela regex inicial.
O caminho para uma solução mais madura é sempre pensar: "Como o usuário pode quebrar meu programa?". Testar ajuda a refinar essa lógica.
Espero que isso ajude nos seus estudos.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!