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的熟练度有更大的提升,尽管花费了很多的时间,但这一切都是值得的。
    这次作业百度学到了许多知识,以后要善于使用这些工具帮助学习。
    在以后的日子里要更加努力的学习相关方面的知识,让自己的知识储备越来越丰富。不断的突破自我!
posted @ 2020-09-16 22:05  碗又大又圆  阅读(158)  评论(2编辑  收藏  举报