目录
一、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

posted on 2020-09-17 22:54  WuHuPilot  阅读(187)  评论(2编辑  收藏  举报