Olá, Marcelo. Como vai?
Parabéns pela resolução da atividade! O seu código para validação de login está muito bem estruturado e o uso do while True com a condição de parada break no final foi a escolha perfeita para garantir que o programa continue rodando até que todas as condições sejam atendidas.
Gostaria de destacar um ponto técnico muito interessante no seu código e trazer uma sugestão de refatoração que vai deixar o seu fluxo de execução ainda mais limpo e eficiente:
Análise do fluxo atual e as Flags
No seu código, você criou duas variáveis de controle (também chamadas de flags): nome_invalido e senha_invalida. Elas começam como False e mudam para True caso os critérios de tamanho não sejam atingidos.
No entanto, perceba que logo após alterar essas flags, você utilizou o comando continue. O continue interrompe a execução da repetição atual e volta imediatamente para o início do while. Por causa disso, o programa nunca chega a ler a última verificação condicional (if not nome_invalido and not senha_invalida:) caso algum dos dados seja inválido.
Dessa forma, as suas duas variáveis flags acabam ficando sem utilidade prática no código, pois o próprio continue já barra o avanço do programa.
Sugestão de Refatoração (Código mais limpo)
Como o Python lê o código de cima para baixo, nós podemos eliminar as variáveis de controle e fazer com que o sucesso do cadastro seja a consequência natural de passar pelos dois filtros anteriores. Veja como o código fica mais enxuto:
while True:
nome = input("Digite seu nome de usuário: ")
senha = input("Digite sua senha: ")
if len(nome) < 5:
print("O nome de usuário deve ter pelo menos 5 caracteres.")
continue
if len(senha) < 8:
print("A senha deve ter pelo menos 8 caracteres.")
continue
# Se o código chegou até aqui, significa que o nome e a senha são válidos!
print("Usuário cadastrado com sucesso!")
break
Indo além: Validando tudo de uma vez só
Se você quiser evitar que o usuário digite a senha caso o nome já esteja incorreto, o uso do continue que você fez está perfeito. Mas, se você quisesse fazer uma validação única e direta, poderia combinar as duas condições em um único bloco estruturado:
while True:
nome = input("Digite seu nome de usuário: ")
senha = input("Digite sua senha: ")
if len(nome) < 5:
print("O nome de usuário deve ter pelo menos 5 caracteres.")
elif len(senha) < 8:
print("A senha deve ter pelo menos 8 caracteres.")
else:
print("Usuário cadastrado com sucesso!")
break
Ambas as abordagens eliminam variáveis desnecessárias na memória e mantêm a excelente lógica de repetição que você construiu.
Continue praticando e compartilhando seus códigos com a comunidade!
Espero que possa ter lhe ajudado!