Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

Validação de entrada para login | Praticando Python: laços for e while

# Sistema de Cadastro com Validação de Entrada
# Validação de nome de usuário e senha usando laço while

def validar_cadastro():
    """
    Função que valida o cadastro do usuário.
    Continua solicitando entrada até que as condições sejam atendidas.
    """
    # Inicializa as variáveis de controle
    nome_valido = False
    senha_valida = False
    
    # Laço que continua até que ambas as validações sejam atendidas
    while not (nome_valido and senha_valida):
        # Solicita o nome de usuário
        nome_usuario = input("Digite um nome de usuário (mínimo 5 caracteres): ")
        
        # Valida o nome de usuário
        if len(nome_usuario) >= 5:
            nome_valido = True
            print("✓ Nome de usuário válido!\n")
        else:
            nome_valido = False
            print(f"✗ Nome de usuário inválido! Você digitou {len(nome_usuario)} caracteres (mínimo 5).\n")
        
        # Solicita a senha (apenas se o nome for válido para melhor UX)
        if nome_valido:
            senha = input("Digite uma senha (mínimo 8 caracteres): ")
            
            # Valida a senha
            if len(senha) >= 8:
                senha_valida = True
                print("✓ Senha válida!\n")
            else:
                senha_valida = False
                print(f"✗ Senha inválida! Você digitou {len(senha)} caracteres (mínimo 8).\n")
        
        # Se algum dado for inválido, mostra mensagem de tentativa novamente
        if not (nome_valido and senha_valida):
            print("Por favor, tente novamente.\n")
    
    # Mensagem de sucesso
    print("=" * 40)
    print("Cadastro realizado com sucesso!")
    print("=" * 40)
    print(f"Usuário: {nome_usuario}")
    print("Bem-vindo ao site de leitura!")


# Chamada da função principal
if __name__ == "__main__":
    print("=" * 40)
    print("SISTEMA DE CADASTRO")
    print("=" * 40)
    print()
    validar_cadastro()
1 resposta
solução!

Oi, estudante. Tudo bem com você?

Seu código está correto e demonstra um excelente domínio sobre a lógica de validação de dados utilizando laços de repetição em Python. O uso das variáveis booleanas associadas ao operador lógico not para controlar o laço while foi uma escolha fantástica, garantindo que o programa continue rodando até que todas as condições de segurança sejam satisfeitas. A sua preocupação com a experiência do usuário, condicionando a solicitação da senha ao sucesso na validação do nome, enriqueceu bastante a solução final da atividade.

Para expandir os horizontes com o uso do laço while, uma prática comum envolve o uso de estruturas infinitas combinadas com a instrução break. Um exemplo útil desse padrão consiste em iniciar a repetição com a instrução while True e utilizar blocos condicionais para verificar o tamanho das strings inseridas. Caso o nome e a senha atendam simultaneamente aos requisitos, a execução do bloco de repetição é interrompida imediatamente por meio do comando break, deixando o fluxo limpo e direto.

Pensando em cenários onde novas regras de validação surjam futuramente, como você avalia a flexibilidade dessa alternativa com break em comparação com a lógica atual?

Parabéns pela dedicação ao desenvolver a atividade, o fórum está sempre à disposição para suas dúvidas.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!