Вместо того, чтобы задавать много вопросов, если вы знаете, что вам придется задавать вопросы по каждому классу персонажей, вы можете просто задать номера заранее. Вы можете предложить им ввести 0
, если они не хотят ничего. Тогда нужно позвонить random.choices()
с номером, указанным в k=#
. Наконец, вы перетасовываете пароль в конце процесса.
Этот подход также сводит к минимуму количество вопросов, на которые пользователь должен ответить. Если пользователю нужны письма, они могут просто сказать вам, сколько они хотят, вместо того, чтобы говорить «да», а затем сказать, сколько.
import random
import string
ans_l = int(input("How many letters do you want (0 for none)? "))
ans_n = int(input("How many numbers do you want (0 for none)? "))
ans_s = int(input("How many specials do you want (0 for none)? "))
password = []
password += random.choices(string.ascii_letters, k=ans_l)
password += random.choices(string.digits, k=ans_n)
password += random.choices(string.punctuation, k=ans_s)
random.shuffle(password)
print(''.join(password))
Пример взаимодействия будет выглядеть как ...
~$ python3 generate_password.py
How many letters do you want (0 for none)? 4
How many numbers do you want (0 for none)? 4
How many specials do you want (0 for none)? 4
5N+46d9I_\"Z
Или без специальных символов
~$ python3 so.py
How many letters do you want (0 for none)? 6
How many numbers do you want (0 for none)? 6
How many specials do you want (0 for none)? 0
9N0Y5X0p29yG