1
resposta

[Sugestão] VALIDAÇÃO DE ENTRADA PARA LOGIN

Prezados(as),
Boa Tarde,

Segue sugestão de solução para o exercício: Validação de Entrada para Login

Validação de entrada para login

João está desenvolvendo um sistema de cadastro para um site de leitura. Ele precisa garantir que os usuários insiram um nome de usuário e uma senha válidos. As regras são as seguintes:

  • O nome de usuário deve ter pelo menos 5 caracteres.
  • A senha deve ter pelo menos 8 caracteres.

João quer que o sistema continue solicitando as informações até que ambas as condições sejam atendidas. Quando o usuário insere dados válidos, o programa deve exibir a mensagem: "Cadastro realizado com sucesso!".

Crie um programa que implemente essa lógica usando um laço while.

**Solução: **

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: ")

    if len(username) >= 5:
        username_valido = True
    else:
        print("Nome de usuário inválido! Deve ter pelo menos 5 caracteres.")
        username_valido = False

    if len(password) >= 8:
        senha_valida = True
    else:
        print("Senha inválida! Deve ter pelo menos 8 caracteres.")
        senha_valida = False

    if not username_valido or not senha_valida:
        print("Tente novamente.\n")

print("Cadastro realizado com sucesso!")
1 resposta

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:

  1. 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.
  2. Avaliação Individual: O código testa o tamanho do username e o tamanho da password de forma independente.
  3. 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!