Olá, Luiz Fernando. Como vai?
Sua proposta de solução para o exercício de validação de login ficou excelente! O código resolve perfeitamente o problema proposto e demonstra um ótimo entendimento de como controlar um laço while usando flags (variáveis booleanas de controle).
O grande trunfo da sua lógica foi usar a condição composta while not username_valido or not senha_valida:. Ela traduz com muita fidelidade a regra de negócio do problema: o laço deve continuar rodando se o nome de usuário for inválido OU se a senha for inválida. O usuário só consegue escapar do loop quando ambas as variáveis se tornarem True simultaneamente.
Para agregar valor ao seu post e ajudar a comunidade a entender perfeitamente a lógica booleana por trás do seu laço, preparei o desenho do fluxo e uma dica bem legal de otimização de código.
O Fluxo de Repetição com Flags Booleanas
A lógica que você construiu cria um ciclo de checagem dupla a cada rodada. O interpretador do Python analisa o estado das suas variáveis de controle seguindo este caminho:
- Teste do Topo: O Python avalia a expressão
not username_valido or not senha_valida. Se qualquer um dos dois for falso, o programa entra no bloco de inputs. - Avaliação Individual: O código testa o tamanho do
username e o tamanho da password de forma independente. - Reavaliação de Saída: Se os dois testes passarem, as duas flags viram
True. Na próxima volta ao topo, a condição do while se torna falsa e o loop é quebrado com sucesso.
Um Toque de Otimização: Eliminando Linhas Redundantes
A sua solução funciona perfeitamente e está corretíssima. Contudo, pensando em engenharia de software e em como escrever códigos mais limpos (clean code), nós podemos remover os blocos else onde você redefine as variáveis como False (como em username_valido = False).
Como no início do programa (ou na rodada anterior) essas variáveis já entram no bloco valendo False, se o usuário digitar algo inválido, você não precisa reafirmar isso para o Python. Basta exibir a mensagem de erro!
Além disso, podemos usar a palavra-chave and diretamente na validação do if final. Veja como o código fica mais compacto e direto:
username_valido = False
senha_valida = False
while not username_valido or not senha_valida:
username = input("Digite o nome de usuário: ")
password = input("Digite a senha: ")
# Se passar no teste, vira True. Se não passar, continua False (valor original)
if len(username) >= 5:
username_valido = True
else:
print("Nome de usuário inválido! Deve ter pelo menos 5 caracteres.")
if len(password) >= 8:
senha_valida = True
else:
print("Senha inválida! Deve ter pelo menos 8 caracteres.")
# Se qualquer um ainda for False, avisa o usuário
if not username_valido or not senha_valida:
print("Tente novamente.\n")
print("Cadastro realizado com sucesso!")
Parabéns por manter a organização impecável na estrutura dos seus scripts e por compartilhar soluções tão robustas com os seus colegas de curso!
Espero que possa ter lhe ajudado!