实现思路:
第一步:6位数的密码,且需要包括字符、数字、特殊符号这三个元素。将三个元素组成6位时每个元素的排列组合列举出来
第二步:从第一步的排列组合中随机抽取一个排列组合类型(i,j,k)
第三步:从所有的字符、数字、特殊符号中随机抽取i个字符,j个数字,k个特殊符号
第四步:将i个字符,j个数字,k个特殊符号组成一个6位数的密码'laststr '
第五步:将laststr中的元素再次打散随机排列组合。此时就能得到一个6位数的随机密码
#生成一个随机密码,不少于6位数(目前下方代码只实现了6位数的密码组合),且需要包括字符、数字、特殊符号
import random
from random import shuffle
import string
#打印所有大写字母,小写字母,数字,特殊符号
sletters = string.ascii_letters
sdigits = string.digits
spunctuation = string.punctuation
#获取6位数的密码,字符、数字、特殊符号组合的排序方式
Option = [[i, j, k] for i in range(1,5) for j in range(1,5) for k in range(1,5) if i + j + k == 6]
Optionitems = Option[random.randint(0, len(Option)-1)]
slettersitems = [random.choice(sletters) for i in range(Optionitems[0])]
sdigitsitems = [random.choice(sdigits) for i in range(Optionitems[1])]
spunctuationitems = [random.choice(spunctuation) for i in range(Optionitems[2])]
#将随机获得的字符 数字 特殊符号组合成密码
laststr = ''.join(slettersitems) + ''.join(sdigitsitems) + ''.join(spunctuationitems)
print(laststr) #打印原始密码
laststr1 = list(laststr)
shuffle(laststr1)
print(''.join(laststr1)) #原始密码乱序输出
缺点:
1、利用最原始的编程方法实现,实现步骤繁琐,代码过于冗余,不易解读
2、无异常情况的考虑
3、其他缺点待发掘。。。待改进(202005182233记)
有错误请帮忙指出,谢谢。