一、实验目的
利用Python中的random库来编写一个密码生成器,通过程序来随机生成密码,从而增强保密性。
在编写该程序之前,我们需要先确定我们的密码有什么要求?
①密码数不小于6位
②密码中可以包含字母、数字、符号
③必须含有至少一个大写字母
④必须含有至少一个特殊符号
二、实验代码
按照上面的要求,我们可以将代码分为几部分,分别是大写字母的随机生成、特殊符号的随机生成、小写字母或数字的随机生成,最后将这几部分的密码整合后随机打乱输出。
1、大写字母的随机生成
#生成随机的大写字母
def get_upper():
count=random.randint(1,3) #在【1,3】之间取一个随机整数
return random.choices('ABCDEFGHIJKLMNOPQRSTUVWXYZ',k=count) #从26个大写字母中随机选择k个
2、特殊符号的随机生成
#随机选取特殊符号
def get_char():
count=random.randint(1,3)
return random.choices('!#*.',k=count)
3、选择随机的小写字母和数字
#选择小写字母或数字
def get_lower(count):
a = 'abcdefghijklmnopqrstuvwxyz0123456789'
return random.choices(a,k=count)
这里由于我们对密码中小写字母或数字并没有具体要求,所以其长度是由我们所设置的密码长度减去上面随机生成大写字母和特殊符号后的长度,因此该函数需要传入其长度要求,而不是随机生成。
4、将密码整合
#生成密码
def get_password(length):
#规定密码不能小于6位
if length<6:
length=6
list=[]
list_upper=get_upper()
special_char=get_char()
#extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
list.extend(list_upper)
list.extend(special_char)
lower_length=length-len(list)
list_lower=get_lower(lower_length)
list.extend(list_lower)
#shuffle函数用于打乱密码顺序
random.shuffle(list)
#join() 方法用于将序列中的元素(必须是str) 以指定的字符 连接生成一个新的字符串。
return ''.join(list)
三、完整代码及运行结果
这就是生成随机密码的四个部分,最后可以写一个主函数来调用这些方法,从而输出随机密码,完整代码如下:
import random
#生成随机的大写字母
def get_upper():
count=random.randint(1,3) #在【1,3】之间取一个随机整数
return random.choices('ABCDEFGHIJKLMNOPQRSTUVWXYZ',k=count) #从26个大写字母中随机选择k个
#随机选取特殊符号
def get_char():
count=random.randint(1,3)
return random.choices('!#*.',k=count)
#选择小写字母或数字
def get_lower(count):
a = 'abcdefghijklmnopqrstuvwxyz0123456789'
return random.choices(a,k=count)
#生成密码
def get_password(length):
#规定密码不能小于6位
if length<6:
length=6
list=[]
list_upper=get_upper()
special_char=get_char()
#extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
list.extend(list_upper)
list.extend(special_char)
lower_length=length-len(list)
list_lower=get_lower(lower_length)
list.extend(list_lower)
#shuffle函数用于打乱密码顺序
random.shuffle(list)
#join() 方法用于将序列中的元素(必须是str) 以指定的字符 连接生成一个新的字符串。
return ''.join(list)
if __name__ == '__main__':
print(get_password(4))
print(get_password(8))
print(get_password(12))
运行结果.png
参考:http://www.coolpython.net/python_senior/miny_pro/generate_password.html