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

[Dúvida] Como deixar o código mais compacto, sem perder a legibilidade

Gostaria de saber se tem formas de deixar esse código mais compacto, sem perder a lógica original

import string
import random

caracteresSenha = list(string.printable)


def geradorDeSenha():
    senhaGerada = []

    uppercase = random.choice(string.ascii_uppercase)
    lowercase = random.choice(string.ascii_lowercase)
    number = random.choice(string.digits)
    special = random.choice(string.punctuation)

    chars = list(uppercase+lowercase+number+special) #Garantindo que a senha tenha ao menos um de cada

    senhaGerada.extend(chars)
    random.shuffle(senhaGerada) #Embaralhando os caracteres iniciais para nunca ficarem na mesma ordem

    senhaGerada.extend(random.choices(caracteresSenha, k=8)) #Selecionando mais 8 caracteres aleatórios

    senhaFinal = ''.join(senhaGerada) #Armazenando os items da lista em uma string
    senhaFinal = senhaFinal.replace(" ", "") #Removendo os espaços da string
    print(senhaFinal)

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
2 respostas
solução!

Oi Gabriel,

Eu fiz assim:

import string, random

def geradorDeSenha():
    base = [
        random.choice(string.ascii_uppercase),
        random.choice(string.ascii_lowercase),
        random.choice(string.digits),
        random.choice(string.punctuation)
    ]
    senha = base + random.choices(string.printable, k=8)
    random.shuffle(senha)
    print(''.join(senha).replace(" ", ""))

Essa versão faz exatamente a mesma coisa, mas de um jeito mais direto!!

Muito obrigado Thais!
Ficou bem mais compacto do que imaginei que seria possível.