Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Validação de entrada para login

# Questão 10 - Sistema de cadastro

# Inicializa a variável de controle
cadastro_valido = False

# Executa o laço enquanto o cadastro não for válido
while cadastro_valido == False:

    # Solicita o nome de usuário
    usuario = input("Digite seu nome de usuário: ")

    # Solicita a senha
    senha = input("Digite sua senha: ")

    # Verifica o tamanho do nome de usuário
    if len(usuario) < 5:
        # Exibe mensagem de erro
        print("O nome de usuário deve ter pelo menos 5 caracteres.")

    # Verifica o tamanho da senha
    elif len(senha) < 8:
        # Exibe mensagem de erro
        print("A senha deve ter pelo menos 8 caracteres.")

    else:
        # Exibe mensagem de sucesso
        print("Cadastro realizado com sucesso!")

        # Encerra o laço
        cadastro_valido = True
2 respostas

Olá, Estudante. Como vai?

O seu código está muito bem estruturado e a lógica do laço while utilizando uma variável de controle (cadastro_valido) é uma excelente prática para garantir que o usuário só saia do loop após fornecer dados que atendam aos requisitos.

Para agregar ainda mais valor ao seu exercício de validação de sistemas de login, gostaria de destacar alguns pontos técnicos importantes:

  • Uso do elif vs if: No seu código, você utilizou o elif. Isso significa que, se o nome de usuário for inválido, o sistema nem chega a verificar a senha naquela rodada. Essa é uma escolha de design válida, mas em sistemas reais, às vezes é preferível mostrar todos os erros de uma vez para o usuário.
  • Simplificação da condição do while: Em Python, você pode escrever while not cadastro_valido:. É uma forma mais "pythônica" e elegante de dizer "enquanto o cadastro não for válido", tornando a leitura do código mais próxima da linguagem natural.
  • Segurança da Informação: Embora este seja um exercício de lógica, uma boa prática em sistemas de login é nunca usar input() para senhas em produção, pois os caracteres ficam visíveis no terminal. Em Python, existe a biblioteca getpass que oculta o que está sendo digitado.

Para levar o seu desafio a um próximo nível, deixo uma sugestão de refatoração que verifica as duas condições simultaneamente e utiliza mensagens mais específicas:

cadastro_valido = False

while not cadastro_valido:
    usuario = input("Digite seu nome de usuário: ").strip()
    senha = input("Digite sua senha: ").strip()

    erros = []

    if len(usuario) < 5:
        erros.append("O nome de usuário deve ter pelo menos 5 caracteres.")
    
    if len(senha) < 8:
        erros.append("A senha deve ter pelo menos 8 caracteres.")

    if not erros:
        print("Cadastro realizado com sucesso!")
        cadastro_valido = True
    else:
        for erro in erros:
            print(f"Erro: {erro}")

Nesse exemplo, se o usuário errar ambos, ele recebe as duas orientações de uma só vez, o que melhora a experiência de uso (UX).

Espero que possa ter lhe ajudado!

solução!

Obrigado pela dica