目录
一、PSP表格
二、解题心路历程和过程
三、代码
四,代码规范
正文
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/SE2020 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167 |
这个作业的目标 | github使用,json解析,项目测试,代码优化 |
学号 | 031802420 |
一、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 80 |
Estimate | 估计这个任务需要多少时间 | 200 | 300 |
Development | 开发 | 150 | 200 |
Analysis | 需求分析 (包括学习新技术) | 300 | 350 |
Design Spec | 生成设计文档 | 30 | 35 |
Design Review | 设计复审 | 30 | 80 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 25 |
Design | 具体设计 | 80 | 120 |
Coding | 具体编码 | 30 | 80 |
Code Review | 代码复审 | 60 | 120 |
Test | 测试(自我测试,修改代码,提交修改 | 50 | 70 |
Reporting | 报告 | 30 | 50 |
Test Report | 测试报告 | 25 | 50 |
Size Measurement | 计算工作量 | 5 | 20 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 5 | 20 |
合计 | 1140 | 1530 |
二、解题心路历程和过程
其实根本就不存在什么解题,
存粹的就是自己太辣鸡了,导致自己什么都打不出来
1,刚开始看到题目的时候,由于自己只会C和C++,所以我想用C/C++来写这个程序,但是拿到题目的时候
发现自己根本看不懂题目,于是就去看了一下C/C++有关开发的一些书,但是看完了之后发现这样根本就不行,数据实在太多了,根本就没有什么好的算法来解决他
2,然后就不知道要怎么搞了。直到倒数第三天,看到有人交了,发现他用的是python,然后又想起来老师给的例子也是用python打的,于是鼓起勇气QQ上问她,问了一下她python开发学习的一些事情
然后到这个时候,我才决定去学习一下python,哪怕打不出来也争取把老师的代码给弄明白
3,然后先去B站学了一点python的基本知识,然后又根据那些已经发上来的博客去看了一下json文件,argparse,的一些操作,发现还是看不怎么懂
然后又去问了那些会了的同学,咨询了好久,然后大致才把老师的文件给勉强看明白
所以代码就是直接交的老师的,因为确实自己不会打,只能争取在这个学期把python开发学会
解题的大致思路
三、代码
就是老师的代码,一摸一样的
1,读取函数
def __init__(self, dict_address: int = None, reload: int = 0):
if reload == 1:
self.__init(dict_address)
if dict_address is None and not os.path.exists('1.json') and not os.path.exists('2.json') and not os.path.exists('3.json'):
raise RuntimeError('error: init failed')
x = open('1.json', 'r', encoding='utf-8').read()
self.__4Events4PerP = json.loads(x)
x = open('2.json', 'r', encoding='utf-8').read()
self.__4Events4PerR = json.loads(x)
x = open('3.json', 'r', encoding='utf-8').read()
self.__4Events4PerPPerR = json.loads(x)
2.json的写入读取与解析
def __init(self, dict_address: str):
json_list = []
for root, dic, files in os.walk(dict_address):
for f in files:
if f[-5:] == '.json':
json_path = f
x = open(dict_address+'\\'+json_path,
'r', encoding='utf-8').read()
str_list = [_x for _x in x.split('\n') if len(_x) > 0]
for i, _str in enumerate(str_list):
try:
json_list.append(json.loads(_str))
except:
pass
records = self.__listOfNestedDict2ListOfDict(json_list)
self.__4Events4PerP = {}
self.__4Events4PerR = {}
self.__4Events4PerPPerR = {}
for i in records:
if not self.__4Events4PerP.get(i['actor__login'], 0):
self.__4Events4PerP.update({i['actor__login']: {}})
self.__4Events4PerPPerR.update({i['actor__login']: {}})
self.__4Events4PerP[i['actor__login']][i['type']
] = self.__4Events4PerP[i['actor__login']].get(i['type'], 0)+1
if not self.__4Events4PerR.get(i['repo__name'], 0):
self.__4Events4PerR.update({i['repo__name']: {}})
self.__4Events4PerR[i['repo__name']][i['type']
] = self.__4Events4PerR[i['repo__name']].get(i['type'], 0)+1
if not self.__4Events4PerPPerR[i['actor__login']].get(i['repo__name'], 0):
self.__4Events4PerPPerR[i['actor__login']].update({i['repo__name']: {}})
self.__4Events4PerPPerR[i['actor__login']][i['repo__name']][i['type']
] = self.__4Events4PerPPerR[i['actor__login']][i['repo__name']].get(i['type'], 0)+1
with open('1.json', 'w', encoding='utf-8') as f:
json.dump(self.__4Events4PerP,f)
with open('2.json', 'w', encoding='utf-8') as f:
json.dump(self.__4Events4PerR,f)
with open('3.json', 'w', encoding='utf-8') as f:
json.dump(self.__4Events4PerPPerR,f)
3,运行类
class Run:
def __init__(self):
self.parser = argparse.ArgumentParser()
self.data = None
self.argInit()
print(self.analyse())
def argInit(self):
self.parser.add_argument('-i', '--init')
self.parser.add_argument('-u', '--user')
self.parser.add_argument('-r', '--repo')
self.parser.add_argument('-e', '--event')`
`def analyse(self):
if self.parser.parse_args().init:
self.data = Data(self.parser.parse_args().init, 1)
return 0
else:
if self.data is None:
self.data = Data()
if self.parser.parse_args().event:
if self.parser.parse_args().user:
if self.parser.parse_args().repo:
res = self.data.getEventsUsersAndRepos(
self.parser.parse_args().user, self.parser.parse_args().repo, self.parser.parse_args().event)
else:
res = self.data.getEventsUsers(
self.parser.parse_args().user, self.parser.parse_args().event)
elif self.parser.parse_args().repo:
res = self.data.getEventsRepos(
self.parser.parse_args().reop, self.parser.parse_args().event)
else:
raise RuntimeError('error: argument -l or -c are required')
else:
raise RuntimeError('error: argument -e is required')
return res`
4,运行结果
四,代码规范
https://github.com/The-chicken/2020-personal-python/blob/master/codestyle.md