1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| import secrets
import string
字母数字 = string.digits + string.ascii_letters
字符 = 字母数字 + r"?!@#$%^&*_-+=[]<>;:,."
字符plus = 字母数字 + string.punctuation
def main(): # 哪个好看选哪个
# print(生成密码(字符))
# print(生成密码(字符))
# print(生成密码(字符))
print(生成密码())
print(生成密码())
print(生成密码())
def 抽取(字符池, 长度):
密码 = "".join(secrets.choice(字符池) for i in range(长度))
return 密码
def 检查(密码, 字符池, 数量):
if sum(c in 字符池 for c in 密码) >= 数量:
return True
else:
return False
def 生成密码(字符池=字符plus, 长度=12, 数字数=1, 小写数=1, 大写数=1, 特殊字符数=1):
while True:
密码 = 抽取(字符池, 长度)
if (
检查(密码, string.digits, 数字数)
and 检查(密码, string.ascii_lowercase, 小写数)
and 检查(密码, string.ascii_uppercase, 大写数)
and 检查(密码, string.punctuation, 特殊字符数)
):
break
return 密码
if __name__ == "__main__":
main()
|