本文最后更新于 205 天前,其中的信息可能已经有所发展或是发生改变。
题目要求
随机生成一个16位的密码,必须包含数字、大写字母、小写字母、符号
并将这个程序封装在函数中,生成的密码长度以参数形式上传。
代码(方法一:全随机)
#方法一:全随机
def pwd_generator(length = 16):
if length < 4:
return ''
while True:
pwd = ''
for _ in range(length):
char_list = [[97,122],[65,90],[48,57],[33,47]]
random_list = random.choice(char_list)
random_char = chr(random.randint(*random_list))
pwd += random_char
l = [False for i in range(4)] #创建4个值都为False的列表
#遍历前面生成的密码,判断密码是否包含四种类型的字符
for word in pwd:
if 97 <= ord(word) <= 122: #ord 把字符转换成字符表上的数字
l[0] = True
if 65 <= ord(word) <= 90:
l[1] = True
if 48 <= ord(word) <= 57:
l[2] = True
if 33 <= ord(word) <= 47:
l[3] = True
if l[0] and l[1] and l[2] and l[3]:
return pwd
pwd_generator(length)
print(pwd_generator(16))
代码(方法二:存在一定规律,四种类型的数量相同)
def pwd2_generator(length = 16):
pwd2 = []
for _ in range(length//4+1):
char_list = [chr(random.randint(97,122)), #小写字母
chr(random.randint(65,90)), #大写字母
chr(random.randint(48,57)), #数字
chr(random.randint(33,47))] #符号
pwd2.extend(char_list)
pwd2 = pwd2[:length]
random.shuffle(pwd2)
return ''.join(pwd2)
print(pwd2_generator(16))
附:(random模块)
import random
print(random.uniform(1,10)) #随机传一个1-10的数
print(random.randint(1,100)) #随机传一个1-100的随机整数 (闭区间)
print(random.randrange(1,3)) #随机一个1-3的整数 (左闭右开)
print(random.choice([1,23,41,564])) #从序列中随机取一个元素(可以是字符串、列表、字典、range对象等)
print(random.sample([1,23,41,564],2)) #取值的个数
li = [1,2,3,4]
random.shuffle(li) #打乱
print(li)
3.124021911327833
60
1
41
[564, 41]
[1, 3, 4, 2]