软件工程第一次编程作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/SE2020 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167 |
这个作业的目标 | 学习github和python |
学号 | 031802424 |
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 最后一天冲刺。。。 | 生活迫使我低下了头 |
Estimate | 估计这个任务需要多少时间 | ||
Development | 开发 | ||
Analysis | 需求分析 (包括学习新技术) | 300 | 1000 |
Design Spec | 生成设计文档 | 10 | 10 |
Design Review | 设计复审 | 10 | 10 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 35 |
Design | 具体设计 | 10 | 10 |
Coding | 具体编码 | 10 | 10 |
Code Review | 代码复审 | 0 | 0 |
Test | 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting | 报告 | ||
Test Report | 测试报告 | ||
Size Measurement | 计算工作量 | ||
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 20 |
合计 | 450 | 1155 |
1.解题思路
- 拿到作业完全看不懂,莫名其妙。下载了那个GH Archive,解压后看到惊呆了,寻思着难倒要把这些全都复制到dev c++的黑框框里???随着时间推进逐渐知道一些大概的意思。先是看了助教的github入门视屏,然后在b站找了其他视屏,知道了github基本的使用。因为基本只会C语言,指着有无大佬用C语言写,后来通过一些途径知道用Python写会方便的多。自然也从网上了解了Python3解析json文件的方法。自学了Python,勉强看了看各位阿sir的代码。依然没有自主编程能力。。。所以用了助教阿sir的代码勉强提交了作业。
2.设计过程
3.代码说明
- (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().repo, 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
if __name__ == '__main__':
a = Run()
- (4)运行结果
- (5)性能分析
4.代码规范
https://github.com/supercarrySJY/My-Code-specification/edit/master/README.md
5.反思总结
-
最后还是没有能自主完成这次作业。作业布置的很早,理应有足够时间去完成。分析失败原因。
(1)个人原因。前三周比较忙。19号第二次考六级,希望能刷到550,并且决定无论如何最后一次考六级(后面时间更紧),于是将大部分时间花在了准备六级上。前三周周日有一天的实验,因为上学期这个实验的理论学得不好,所以分了时间在学习这门课上。
(2)知识储备不足,python入门到实践草略看了一知半解,无法独立完成作业。
(3)对完成作业时间和方式的错误估计,本以为可以坚持用c++完成本次作业,结果思想斗争后还是开始学习python。 -
后续工作:本周后不管作业成绩如何都会重新完善这次作业,确实有些力不从心。将继续python的学习,赶上大家的进度。