Python课程作业二——生成密码

本文最后更新于:几秒前

题目要求

要求:系统初始化为用户生成初始密码,生成的密码要求是随机生成的,并且生成的密码包含一串字符,其中一位数字和一位特殊字符。

代码(有详细注释)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import random
import csv
import json
#字符的取值范围
special_char="!\"#$%&\'()*+,-./[\\]^_`{|}~?"
char = "abcdefghijklmnopqrstuvwxyz"
#定义三个类型字符的获取函数
def get_special_char():
return special_char[random.randint(0,25)]

def get_number():
return random.randint(0,9)

def get_char():
return char[random.randint(0,25)]
#根据位数生成代码
def generate_code(num):
#首先生成num范围中的两个随机位,用于存储数字和特殊字符
#第一个字符位,第二个数字位
x,y = -1,-1
while x==y:
x = random.randint(0,num-1)
y = random.randint(0,num-1)
#其次生成密码
pwd = ""
#判断是哪种字符类型
for i in range(num):
if i == x:
pwd += get_special_char()
elif i == y:
pwd += str(get_number())
else:
pwd += get_char()

return pwd


if __name__ == '__main__':
# 首先设置密码文件
password_file = 'pwd.txt'
# 设置最终的学号-密码 字典
stu_pwd_dict = {}
# 读取文件
files = open(password_file, 'r')
# 去掉\n
stu_list = files.read().splitlines()
# 设置两种模式:1、全体指定相同的密码位数 2、从文件中读入密码位数,其中每一行按照"XXXX,6"的格式存储
while True:
pattern = str(input("请输入您需要设定的位数模式,整体设置扣1,文件设置扣2"))
if pattern=="1":
while True:
try:
num = eval(input("请输入您需要设置的密码位数,支持6-18位:"))
if num in range(6,19):
print("密码生成中,请稍候……")
for each in stu_list:
pwd = generate_code(num)
stu_pwd_dict[each] = pwd
break
else:
print("您输入的密码位数有误,请重新输入:")
except:
print("您输入的数字格式有误,请重新输入:")
break
elif pattern=="2":
# 默认文件中的每一行都是以学号_位数为间隔
for each in stu_list:
id,num = each.split("_")
pwd = generate_code(int(num))
stu_pwd_dict[id] = pwd
break
else:
print("您输入的模式代码有误,请重新输入:")
continue
name = str(input("您的密码已经生成完毕,请重命名输出文件:"))
#设置文件的存储格式,支持txt,csv和json三种格式
while True:
try:
mode = eval(input("请选择生成密码文件的内部格式,按行存储扣1,csv文件存储扣2,json文件存储扣3:"))
if mode==1:
fileObject = open(name+'.txt', 'w')
for each in stu_pwd_dict:
fileObject.write(each+"_"+stu_pwd_dict[each])
fileObject.write('\n')
fileObject.close()
break
elif mode==2:
header = ['学号','密码']
fileObject = open(name+'.csv', 'w',encoding='UTF8', newline='')
writer = csv.writer(fileObject)
writer.writerow(header)
for each in stu_pwd_dict:
list=[each,stu_pwd_dict[each]]
writer.writerow(list)
fileObject.close()
break
elif mode==3:
fileObject = open(name+'.json', 'w')
fileObject.write(json.dumps(stu_pwd_dict))
fileObject.close()
break
else:print("您的文件格式代码输入有误,请重新输入")
except:
print("您的文件格式代码输入有误,请重新输入")
print("感谢您的使用")

Python课程作业二——生成密码
http://paopao0226.site/post/5431c3b9.html
作者
Ywj226
发布于
2022年10月13日
更新于
2023年9月23日
许可协议