Генератор случайного пароля с возможностью изменения его составных частей: цифр, символов и букв. Частенько бывает, что нужно смоделировать какой-либо валидный пароль, а может и не валидный, но нет времени прописывать код...
Ниже приведём примеры функций для генерации пароля в разрезе нескольких подходов к его наполнению.
Вариант 1. Для получения пароля просто задаём его длину, а его составные части (буквы, цифры и символы (БЦС)) будут генерироваться случайным образом в коде:
import random
import string
def random_password_1(length):
password = ""
password += string.digits
password += string.punctuation
password += string.ascii_letters
password = ''.join(random.choice(password) for _ in range(length))
return password
print(random_password_1(12))
out: ydpqGzU(1iVPwi2
Метод string имеет несколько переменных. Их можно посмотреть, нажав Ctrl и на слово string в вашей IDE. В данном случае мы используем переменные для вывода цифр, символов и букв.
Вариант 2. Функция генерирует случайные БЦС в соответствии с указанными длинами и объединяет их в одну строку. Затем строка перемешивается для создания случайного пароля:
def random_password_2(digits_length, symbols_length, letters_length):
password = ''
# Генерация случайных цифр
digits = ''.join(random.choices(string.digits, k=digits_length))
password += digits
# Генерация случайных символов
symbols = ''.join(random.choices(string.punctuation, k=symbols_length))
password += symbols
# Генерация случайных букв
letters = ''.join(random.choices(string.ascii_letters, k=letters_length))
password += letters
# Перемешиваем пароль
password = ''.join(random.sample(password, len(password)))
return password
print(random_password_2(7, 3, 3)) # len digits, symbols, letters
out: D896E5%d);159
Вариант 3. Длину БЦС прописываем в самом коде, плюс разделяем прописные и строчные буквы:
def random_password_3() -> str: # Указываем, что возвращать будем string
random_source = string.ascii_letters + string.digits + string.punctuation
# ascii_letters - прописные и строчные буквы
password = random.sample(random_source, 6) # любые случайные БЦС
password += random.sample(string.ascii_uppercase, 2) # плюс только прописные
password += random.sample(string.digits, 3) # только цифры
password += random.sample(string.punctuation, 1) # только символы
pass_list = list(password) # помещаем в список
random.SystemRandom().shuffle((pass_list)) # перемешиваем значения в списке
password = ''.join(pass_list)
return password
print(random_password_3())
out: G0o(C2yS6Zi5
