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!

1
resposta

[Sugestão] Fiz de uma forma um pouco diferente...

import random

def gerar_senha(senha):
    for i in range(12):
        senha.append((random.choice(elementos)))

def validar_senha(senha):
    if (any(elemento.islower() for elemento in senha)
        and any(elemento.isupper() for elemento in senha)
        and any(elemento.isdigit() for elemento in senha)
        and any(not elemento.isalnum() for elemento in senha)
        ):
        return True
    else:
        return False

def main(senha):
    gerar_senha(senha)
    if validar_senha(senha) == False:
        senha = []
        main(senha)
    else:
        print(f"Senha gerada: {''.join(senha)}")

senha = []
elementos = ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%&*?,.')

main(senha)
1 resposta

Oi, Gabriel. Tudo bem com você?

Gostei da sua solução para o gerador de senha segura. Você optou por uma abordagem diferente da proposta mais direta, utilizando funções separadas para gerar e validar a senha, o que ajuda bastante na organização e reutilização do código. Além disso, a validação com any() ficou bem aplicada para verificar a presença de letra minúscula, maiúscula, número e caractere especial, atendendo corretamente aos requisitos da atividade.

O código funciona conforme o esperado, mas há um detalhe que vale observar. Quando a senha gerada não passa na validação, a função main() chama ela mesma novamente de forma recursiva. Embora isso funcione para este exercício, em cenários maiores é mais comum utilizar um laço de repetição para evitar várias chamadas empilhadas na memória. Outro ponto é que o parâmetro senha da função gerar_senha() poderia ter um nome mais específico, como lista_senha, para deixar a intenção ainda mais clara.

O que você acha de experimentar uma versão que já garanta a inclusão de cada categoria de caractere antes de completar os 12 caracteres aleatórios?

Parabéns pela implementação e por compartilhar sua solução no fórum. Continue explorando abordagens diferentes, pois isso ajuda bastante no desenvolvimento da lógica de programação. O fórum segue à disposição para suas próximas dúvidas e contribuições.

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