第一次个人编程作业

1.github链接

2.PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 60
Estimate 估计这个任务需要多少时间 50 60
Development 开发 400 450
Analysis 需求分析 (包括学习新技术) 300 360
Design Spec 生成设计文档 90 60
Design Review 设计复审 90 60
Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 30
Design 具体设计 60 120
Coding 具体编码 300 350
Code Review 代码复审 60 90
Test 测试(自我测试,修改代码,提交修改) 60 90
Reporting Standard 报告 60 40
Test Repor 测试报告 60 40
Size Measurement 计算工作量 20 10
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 40
合计 1670 1860

3.计算模块接口的设计与实现过程

(1) 解题思路及代码实现思路:

准备工作:用python的json库处理json文件,形成一个字典,这个字典是一级套着一级的,一开始存的是全国的所有省份,对某个省展开后就是这个省的所有市。因为这个字典的结构,所以这个算法的复杂度很低。
首先将难度等级分离,把前两个字符取出即可。利用逗号把姓名取出,取姓名用split函数,逗号前面的为姓名,后面的为要处理的地址。再利用python的正则库将电话号码取出,取出后将电话号码删除,这样我们只要给地址分级即可。
对于地址分级我们要从一级开始分级,然后依次分级到七级。分别为7个函数。
对于省级的匹配,遍历这个此时的字典,在字符串中寻找匹配。这里我用了find函数,下标从0开,方便后面的删除。匹配到后注意判断直辖市和自治区即可,自治区我用了一个映射来做,节约了代码量。找到将这些信息保存后在字符串中删除,因为后面要往下一级的匹配,所以匹配好了之后就可以删除这个省的信息,避免对下面的产生影响。匹配完之后将字典展开,这样下面一级才可以匹配。
二级三级四级思路和一级是一样的,由于三级和四级的后缀不大相同,所以我用了一个数组来保存后缀来匹配确定后缀。
对于后面5,6,7级的地址由于后缀不会缺省,所以直接正则匹配即可。

(2) 实现过程:

由于将功能几乎都封装在函数中,所以只要在main函数中依次调用这些函数即可。最后用一个字典保存输出即可。

(3) 独到之处:

json的数据字典是层次展开的,所以算法复杂度最多到10000次左右,所以成功将算法的速度瓶颈控制在对json文件的操作,所以速度会快一些。

4.计算模块接口部分的性能改进:

在这里插入图片描述
性能的瓶颈在input上,的确也是符合预期的,毕竟算法复杂度并不太高,为了一点的性能优化去写字符匹配算法比如kmp,自动机这些也是划不来的,也更容易秃头。实在要优化的话就可以上一些高级字符串匹配算法,可以在每次函数匹配时将性能得到优化。

5.计算模块部分单元测试展示:

输入:
2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
1!家基,江苏省连云港市赣榆区海头镇赣18828767011柘线盐仓城村村委会.
输出:
{"姓名": "李四", "手机": "13756899511", "地址": ["福建省", "福州市", "鼓楼区", "鼓西街道", "湖滨路", "110号", "湖滨大厦一层"]}
{"姓名": "张三", "手机": "13599622362", "地址": ["福建省", "福州市", "闽侯县", "上街镇", "福州大学10#111"]}
{"姓名": "王五", "手机": "18960221533", "地址": ["福建省", "福州市", "鼓楼区", "", "五一北路", "123号", "福州鼓楼医院"]}
{"姓名": "小陈", "手机": "13965231525", "地址": ["广东省", "东莞市", "", "凤岗镇", "凤平路13号"]}
{"姓名": "家基", "手机": "18828767011", "地址": ["江苏省", "连云港市", "赣榆区", "海头镇", "赣柘线盐仓城村村委会"]}
在这里插入图片描述

6.计算模块部分异常处理说明。

各个函数中都有捕获异常的机制,如果有异常则直接返回,不影响前后的代码逻辑
在这里插入图片描述
以分第三级地址为例

7.

花费时间见2

8.总结:

首先,这次的作业是真的难。花了我好久的时间,弄的我这一周别的事情几乎都没有做,甚至有点被生活压的喘不过气来,有点想跳楼哈哈哈。
一开始想用java,复习了java后发现太难写,也是听说评测难用。决定python,后来两个小时速成python基础语法,然后面向需求学习。还好有一些编程基础,前前后后花了一整天终于搞完代码,结果倒也还行。过了几天,感觉有bug,改了一下午结果又改回去了,真的是心态崩了,也怪自己没看清楚题目。
写博客的过程也是遇到各种未知科技,搞来搞去真的心态有点崩。
虽然这一周过的很痛苦,但是还是学到了很多东西,感觉自己又变强(tu)了。

posted @ 2019-09-29 22:26  run_around  阅读(237)  评论(3编辑  收藏  举报