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,懂得去查看一些文档了,应该也算是一种进步。

posted @ 2020-09-16 23:58  假诗人  阅读(353)  评论(2编辑  收藏  举报