FZU软件工程第一次编程作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/SE2020 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167 |
这个作业的目标 | 1、学习解析 Json 文件。 2、加强对 GitHub 的理解 3、强化对Python的应用 |
学号 | <041802216> |
PSP表格:
1.PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
Estimate | 估计这个任务需要多少时间 | 40 | 50 |
Development | 开发 | ||
Analysis | 需求分析 (包括学习新技术) | 60 | 160 |
Design Spec | 生成设计文档 | 20 | 40 |
Design Review | 设计复审 | 30 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 40 | 50 |
Design | 具体设计 | 50 | 60 |
Coding | 具体编码 | 400 | 600 |
Code Review | 代码复审 | 30 | 50 |
Test | 测试(自我测试,修改代码,提交修改) | 240 | 360 |
Reporting | 报告 | ||
Test Report | 测试报告 | 20 | 20 |
Size Measurement | 计算工作量 | 30 | 40 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 240 | 300 |
合计 | 1200 | 1760 |
解题思路:
- 首先在看到老师的题目是,内心先是震惊,毕竟看懂题目都花了将近 10 min ,然后就开始深思熟虑,
但我觉得就算我深思熟虑也不太会,毕竟这有些超出我能力范围。
之后花了时间学习了Github的使用,虽然依旧是云里雾里但好歹勉强会用了。同时看了代码规范。 而后我发现了实例代码,用的是Python,转念一想,最近正好在学Python,何不分析一波操作。
接下来就开始疯狂百度。找一些相关的知识,并且在同学的帮助下安装了pycharm,有好多要求都是通过pycharm帮我完成的。在对整体有一点了解的基础上,我开始了代码的设计过程。
代码设计:
- 本题的需要精通Python的知识,虽说没有涉及到太多的算法,但是对于
一个菜鸡
来说已经难度很大了。(为此我看了好久的Python),总算是对这题目有了大概的轮廓,就可以开始着手编写代码了,在对题目的编写过程中,有查询一些方法,比如用json库用来读取文件
,把json
转化为字典,OS库的exists函数
判断路径是否存在等等。我百度了许多代码,并且将学长的代码也来分析了好久,在自己的编写过程中,思路基本是被大佬带着走的。但是还是没办法做出来,很难过。
代码说明:
流程如图:
代码如下:
def run(): #命令行参数的设置
my_parser = argparse.ArgumentParser(description='analysis the json file')
my_parser.add_argument('-i', '--init', help='json file path') #添加参数
my_parser.add_argument('-u', '--user', help='username') #同上
my_parser.add_argument('-r', '--repo', help='repository name') #同上
my_parser.add_argument('-e', '--event', help='type of event') #同上
args = my_parser.parse_args() #解析命令行给出的参数
for self.__dict in self.__dicts:
# 如果属于四种事件之一 则增加相应值
if self.__dict['type'] in self.__types:
self.__event = self.__dict['type']
self.__name = self.__dict['actor']['login']
self.__repo = self.__dict['repo']['name']
self.__cnt_perP[self.__name + self.__event] = self.__cnt_perP.get(self.__name + self.__event, 0) + 1
self.__cnt_perR[self.__repo + self.__event] = self.__cnt_perP.get(self.__repo + self.__event, 0) + 1
self.__cnt_perPperR[self.__name + self.__repo + self.__event] = self.__cnt_perPperR.get(self.__name + self.__repo + self.__event, 0) + 1
def __save2json(self): #计算出来的字典保存到json文件
with open("1.json", 'w', encoding='utf-8') as f:
json.dump(self.__cnt_perP, f)
with open("2.json", 'w', encoding='utf-8') as f:
json.dump(self.__cnt_perR, f)
with open("3.json", 'w', encoding='utf-8') as f:
json.dump(self.__cnt_perPperR, f)
print("Save to json files successfully!")
def __read_2(self): #对三个json文件进行答案读取
self.__cnt_perP = {}
self.__cnt_perR = {}
self.__cnt_perPperR = {}
with open("1.json", encoding='utf-8') as f:
self.__cnt_perP = json.load(f)
with open("2.json", encoding='utf-8') as f:
self.__cnt_perR = json.load(f)
with open("1.json", encoding='utf-8') as f:
self.__cnt_perPperR = json.load(f)
运行结果:
单元测试截图:
单元测试及性能优化描述:
- 目前不知道如何对代码进行优化,只能用pycharm生成的图表代替,节选了一部分:
代码规范链接:
https://github.com/Liuxinwei111/Code-Specification/blob/master/README.md
总结:
- 通过这次作业,让我知道了我与
大佬的差距
是真的大。但是还是要继续努力。
并且,我感觉我的编程能力
有了一定的进步,并且对Python的熟练度有更大的提升,尽管花费了很多的时间,但这一切都是值得的。
这次作业百度学到了许多知识,以后要善于使用这些工具帮助学习。
在以后的日子里要更加努力的学习相关方面的知识,让自己的知识储备越来越丰富。不断的突破自我!