简介:
起因,由于收到邮件需要修改密码
没得说,那就改
实例
使用random来生成随机密码,包含大写字母,小写字母,数字,特殊字符的密码
首先生成一个长度为15,包含大写字母,小写字母,数字,特殊字符的密码
In [1]: import random# 首先,创建几个字符串In [9]: a = "qwertyuiopasdfghjklzxcvbnm"
In [10]: b = a.upper()
In [11]: bOut[11]: 'QWERTYUIOPASDFGHJKLZXCVBNM'
In [12]: c ='0123456789'
In [13]: d ='~!@#$%^&*():?'
# 创建一个列表,包含15个元素In [14]: pw = [i for i in range(15)]
In [15]: pwOut[15]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
# 字符串组合为新列表In [20]: sec_list = [a,b,c,d]
In [21]: sec_listOut[21]:['qwertyuiopasdfghjklzxcvbnm', 'QWERTYUIOPASDFGHJKLZXCVBNM', '0123456789', '~!@#$%^&*():?'] # 随机选取字母替换列表# 首先,从sec_list中随机选择一个列表# 然后,从a,b,c,d中随机选择一个元素In [31]: for i in range(len(pw)): ...: pw[i] = str(random.choice(random.choice(sec_list)))In [32]: pwOut[32]: ['g', '6', '3', 'w', 'N', '4', 'd', '6', '9', '$', '6', '5', 'g', '1', '1']
# 但是这样潜在的可能是存在有大写字母,小写字母,特殊字符,数字缺少其中一个或者几个的状况# 虽然概率很低# 加一个判断条件In [43]: judge = [] ...: for i in pw: ...: if i in a: ...: judge.append('a') ...: elif i in b: ...: judge.append('b') ...: elif i in c: ...: judge.append('c') ...: elif i in d: ...: judge.append('d')
In [44]: judgeOut[44]: ['a', 'c', 'c', 'a', 'b', 'c', 'a', 'c', 'c', 'd', 'c', 'c', 'a', 'c', 'c'] # 然后我们将其转化为集合In [45]: judge_set = set(judge)In [46]: judge_setOut[46]: {'a', 'b', 'c', 'd'} # 判断其长度,如果不为4,则抛弃,直到等于4出现In [47]: len(judge_set)Out[47]: 4 # 然后,列表转化为字符串In [38]: passwd = ''.join(pw)In [39]: passwdOut[39]: 'g63wN4d69$65g11'
整体代码
import randomdef get_passwd(num): # 设置大写字母,小写字母,数字,特殊字符 a = 'qwertyuiopasdfghjklzxcvbnm' b = 'QWERTYUIOPASDFGHJKLZXCVBNM' c = '0123456789' d = '~!@#$%^&*():?' # 创建一个指定长度的列表,并随机替换其中元素 pw = [i for i in range(num)] sec_list = [a,b,c,d] for i in range(len(pw)): pw[i] = str(random.choice(random.choice(sec_list))) # 判断生成的列表中的字符都是属于什么类型 judge = [] for i in pw: if i in a: judge.append('a') elif i in b: judge.append('b') elif i in c: judge.append('c') elif i in d: judge.append('d') # 如果全部包含4种类型,则输出为字符串 # 否则则重新开始 if len(set(judge)) == 4: return ''.join(pw) else: get_passwd(num)
运行
In [8]: print(get_passwd(10))6@%7H&Dd7)In [9]: print(get_passwd(20))2(t#homPlo8WQ24KVD*nIn [10]: print(get_passwd(30))cDp53xNVsTUuz(Gz!jznwA7YQ58D3oIn [11]: print(get_passwd(40))#%85NW!n0@$u00?tZz%)!2$bf)(AkzT!w&^*Fokb
如果,密码和账号太多了,可以存在一个指定的文本中,然后给他上锁,下次需要的时候进行查看