2020软件工程第二次作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/SE2020 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167 |
这个作业的目标 | <分析github用户的行为数据> |
学号 | <031802106> |
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 2400 | 1200 |
Estimate | 估计这个任务需要多少时间 | 1200 | 600 |
Development | 开发 | 240 | 360 |
Analysis | 需求分析 (包括学习新技术) | 1200 | 1440 |
Design Spec | 生成设计文档 | 30 | 60 |
Design Review | 设计复审 | 30 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
Design | 具体设计 | 20 | 20 |
Coding | 具体编码 | 120 | 80 |
Code Review | 代码复审 | 30 | 30 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 60 |
Reporting | 报告 | 30 | 60 |
Test Report | 测试报告 | 30 | 60 |
Size Measurement | 计算工作量 | 360 | 480 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 60 | 60 |
合计 | 5800 | 4500 |
解题心路历程
一开始真心不会,我没学过python,所以示例代码看不懂,并且整个任务要干嘛我也不明白,于是乎我踌躇不前,就这么无所事事的过了几天,我也有去问别人,不过他们也还没整完,也没法仔细和我说,然后知道临近作业截止的前几天,慢慢的有大佬们开始交作业了,于是我就点开了他们的博客(借鉴一波),看了半天才算明白,原来有发测试样例,像这样
上网一查格式,原来是字典(恕我见识浅薄),然后我开始想用c++试试,可惜能力不够,于是乎我想从示例代码入手,我就花了一天大概学了下python的一些语法,想着去看懂示例代码,一句一句的百度理解,然后我觉得我看懂了,但是要自己敲起代码,发现还是不会,我索性又开始去看看别人的代码,了解了大佬的思路(十分感谢,没有大佬们,我寸步难行),然后我还看到了这玩意竟然如此方便,可以输入提前设定好的参数,并且生成一个字典,这不是非常符合题目要求的查询用户操作的进行,只要再将字典的每一项value赋值给需要查询的变量(username......),作为参数传入统计个数的函数里,进而计算出个数。
思路——
- 1)初始化:将含有多个字典的json文本读入 --> 将文本里多个字典输入到一个data列表--> 筛选关键信息 --> 整理后塞进进行字符串对照的函数
- 2)查询:将传入的参数与data列表里的每个字典进行查询计数。
于是我学了下json文件的读写操作
def read_json(path):
filelist=os.listdir(path)
f1=open('newData.json','w',encoding='utf-8')
for file in filelist:
path2=path+'\\'+file
with open(path2,'r',encoding='utf-8')as f:
for line in f:
f1.write(line)
return
这个读入函数用来创建一个可读的经过整理的newData新的json文件
然后完成下得出个数统计的函数
def getAnswer(data,username,repo,event):
cout=0
for i in data:
if not username=='':
if not username==i['actor']['login']:
continue
else:
pass
else:
pass
if not repo=='':
if not username==i['repo']['name']:
continue
else:
pass
else:
pass
if i['type']==event:
cout=cout+1
else:
pass
return cout
目的就是得到事件个数,只要上面传入的字符串都能够顺利和数据文件里的字典value匹配,并且最后也是'type'键对应的value也是event变量的字符串,就代表统计到一个了
接着这是主函数
if __name__ == "__main__":
data = []
username = ''
repo = ''
event = ''
opts, args = getopt.getopt(sys.argv[1:], 'i:u:e:r:', ['init=', 'user=', 'repo','event='])
if opts[0][0]=='-i'or opts[0][0]=='--init':#如果传入的是-i,就对数据初始化,创建一个新的json。
read_json(opts[0][1])
exit()
else:
with open('newData.json', 'r', encoding='utf-8') as f:
for line in f:
data.append(json.loads(line))
for i in range(0, len(opts)):#用if来判断输入的命令,给相应的变量赋值。
if opts[i][0] in ('-u', '--user'):
username = opts[i][1]
continue
else:
pass
if opts[i][0] in ('-r', '--repo'):
repo = opts[i][1]
continue
else:
pass
if opts[i][0] in ('-e', '--event'):
event = opts[i][1]
continue
else:
pass
print(getAnswer(data, username, repo, event))
迭代日志
- 以上是我模仿了大佬的思路然后自己打了一下,但是我只初略利用群里的测试样例试了下,至于那些什么单元测试我不会用,我会赶紧学会试一下,感觉单单这样写,测试起来耗时应该很长吧,接下去看看那些多线程读取文件的操作怎么做,试着看能不能跑快点。
测试
- 目前只进行了命令行打开测试样例的测试
- 单元测试
代码规范
https://github.com/czy22655/test/blob/master/代码规范.txt
总结
这次算是蛮匆忙的一次作业,做的很粗糙,主要是知识储备少,技能不熟练,初略新学了python,懂得去查看一些文档了,应该也算是一种进步。