Генератор пароля с условием

Все привет! помогите, пожалуйста, решить задачку: Хочу написать функцию которая будет возвращать пароль длина которого зависит от числа которого ему передадим, если ничего не передать то любое от 6 до 100, так же в пароле обязательно должны быть цифры, заглавные и прописные буквы (хотелось бы +- пропорционально) написал такое, подскажите пожалуйста можно ли это дело как-то оптимизировать?

def generated_password(num=random.randint(6, 100)):
    pas = ''
    for x in range(num//3):
        pas = pas + random.choice(string.digits)
    for x in range(num//3):
        pas = pas + random.choice(string.ascii_uppercase)
    for x in range(num - num//3 - num//3):
        pas = pas + random.choice(string.ascii_lowercase)
    return pas

Ответы (1 шт):

Автор решения: Amgarak

Можно вот так переписать:

import random
import string

def generate_password(num = random.randint(6, 100)):
    num_digits = num // 3
    num_uppercase = num // 3
    num_lowercase = num - num_digits - num_uppercase

    digits = random.choices(string.digits, k=num_digits)
    uppercase_letters = random.choices(string.ascii_uppercase, k=num_uppercase)
    lowercase_letters = random.choices(string.ascii_lowercase, k=num_lowercase)

    password = ''.join(digits + uppercase_letters + lowercase_letters)
    return password

print(generate_password())
print(generate_password(99))

# Бонусом можно добавить перемешивание символов в пароле
password = generate_password(99)
password_list = list(password)
random.shuffle(password_list)
shuffled_password = ''.join(password_list)
print(shuffled_password)

Вывод:

2651657183629XSFQUWGPUDOMIbkdqlbwqyezbz
691347980135530421398568592938646RRRRADQZIWYHYYOHQYJKFTVSRKSFCFICWvmcdrqmpgxstotcjognmzyfcjebjkfyhx
20A1p6c7WK43Ki9e4574NWFP15Ep6ilCSzzgUFhc58CwsLCvT2HM8NZV69XIC2kO6jya6RkJFXpJ8a14iew0My8015vycjcbzY2
→ Ссылка