Python每日一谈|No.25.实例.6-Life.2-Python-生成密码

2021-03-24 13:33:51 浏览数 (1)

简介:

起因,由于收到邮件需要修改密码

没得说,那就改

实例

使用random来生成随机密码,包含大写字母,小写字母,数字,特殊字符的密码

首先生成一个长度为15,包含大写字母,小写字母,数字,特殊字符的密码

代码语言:javascript复制
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'

整体代码

代码语言:javascript复制
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)

运行

代码语言:javascript复制
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))#�NW!n0@$u00?tZz%)!2$bf)(AkzT!w&^*Fokb

如果,密码和账号太多了,可以存在一个指定的文本中,然后给他上锁,下次需要的时候进行查看

0 人点赞