Генератор пароля с условием
Все привет! помогите, пожалуйста, решить задачку: Хочу написать функцию которая будет возвращать пароль длина которого зависит от числа которого ему передадим, если ничего не передать то любое от 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