Olá, Deivide. Como vai?
Sua resolução está excelente e atende perfeitamente aos requisitos de segurança e validação! A estrutura while True (que cria um laço intencionalmente infinito) combinada com o comando break para a saída é a abordagem padrão mais eficiente na programação para resolver problemas de validação de dados de entrada.
O uso da função len() para contar os caracteres e o operador lógico and para garantir que ambas as regras sejam verdadeiras ao mesmo tempo mostram que você assimilou muito bem a lógica de condições complexas.
Para agregar ainda mais valor ao seu aprendizado e trazer uma perspectiva prática de mercado, separei duas sugestões de melhorias que tornariam esse sistema de login e cadastro ainda mais robusto:
1. Sistema com Limite de Tentativas
No seu código atual, se um usuário errar os requisitos, o laço continuará rodando para sempre. No ambiente corporativo e em análises de segurança, deixar um laço de login totalmente livre abre brechas para ataques automatizados (como tentativas de força bruta).
Uma boa prática é adicionar uma variável contadora para limitar o número de tentativas e bloquear o processo caso o limite seja atingido. Veja como implementar isso:
tentativas = 0
limite_tentativas = 3
while tentativas < limite_tentativas:
print(f"--- NOVO CADASTRO (Tentativa {tentativas + 1} de {limite_tentativas}) ---")
usuario = input("Digite o nome de usuário (mínimo 5 caracteres): ")
senha = input("Digite a senha (mínimo 8 caracteres): ")
if len(usuario) >= 5 and len(senha) >= 8:
print("\nCadastro realizado com sucesso!")
break
else:
tentativas += 1
print("\nErro: Usuário ou senha não atendem aos requisitos.")
if tentativas < limite_tentativas:
print("Tente novamente.\n")
else:
# Este bloco ELSE só executa se o WHILE chegar ao fim sem passar pelo BREAK
print("\nNúmero máximo de tentativas atingido. Cadastro bloqueado por segurança!")
2. Mensagens de Erro Específicas (Feedback ao Usuário)
No seu código, se o usuário digitar uma senha válida (com 10 caracteres), mas um nome de usuário inválido (com 3 caracteres), o sistema exibirá uma mensagem genérica dizendo que "Usuário ou senha não atendem aos requisitos". Para melhorar a experiência do usuário (UX), o ideal é dizer exatamente qual dos dois campos falhou.
Podemos fazer isso separando as validações com estruturas if e elif:
if len(usuario) < 5:
print("\nErro: O nome de usuário precisa ter pelo menos 5 caracteres.\n")
elif len(senha) < 8:
print("\nErro: A senha precisa ter pelo menos 8 caracteres.\n")
else:
print("\nCadastro realizado com sucesso!")
break
Dessa forma, o seu programa se torna muito mais amigável e indica com clareza o caminho para a correção.
Parabéns pela dedicação ao longo de todo o curso e por compartilhar soluções tão limpas e bem comentadas aqui no fórum!
Espero que possa ter lhe ajudado!