第一次个人编程作业

测评的同学麻烦安装一个cpca库!

一. github链接

二. PSP表格

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

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

首先用两个函数提取名字,手机号码,通过学习发现正则表达式可以完美的解决这个问题。然后是两个关键函数,difficulty_1和difficulty_2分别用来解决难度1和2的问题。其中用到了cpca库,把前三级地址提取出来映射到字典里,注意输入格式要用列表。接着通过查找关键字来确定该级应填的地址,比如第四级地址应该查找的是“镇或者乡或者街道”,找到之后利用split函数将该级地址分割出去,依此类推查找下一级地址。最后把前三级地址和分离出来的后续地址(后续地址存放于town,village这些字符串里)放在同一个列表里,然后分装成json文件即可输出。
算法关键和独到之处:使用了第三方库cpca库节省代码量,不过它返回的是数据帧格式,要用iloc提取然后转换成字典格式.另外用正则表达式和字符串的split函数检查一个字符串是否与某种模式匹配比较方便,高效。

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

difficulty_1函数耗时最多,调用cpca库对前三级地址解析会比最初的从省开始解析地址要好一点。另外匹配数据字符串耗时,应通过简化匹配方式,减少字符串处理过程中的分支数来达到优化。

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

1!钭隆箍,山西省阳泉市13100299356矿区赛鱼街道麻地巷32号楼.
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\颜\AppData\Local\Temp\jieba.cache
Loading model cost 0.861 seconds.
Prefix dict has been built succesfully.
{"姓名": "钭隆箍", "手机": "13100299356", "地址": ["山西省", "阳泉市", "矿区", "赛鱼街道", "麻地巷32号楼"]}
2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
{"姓名": "李四", "手机": "13756899511", "地址": ["福建省", "福州市", "鼓楼区", "鼓西街道", "湖滨路", "110号", "湖滨大厦一层"]}
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
{"姓名": "张三", "手机": "13599622362", "地址": ["福建省", "福州市", "闽侯县", "上街镇", "福州大学10#111"]}
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
{"姓名": "王五", "手机": "18960221533", "地址": ["福建省", "福州市", "鼓楼区", "", "五一北路", "123号", "福州鼓楼医院"]}
3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
{"姓名": "小美", "手机": "15822153326", "地址": ["北京市", "北京市", "东城区", "", "交道口东大街", "1号", "北京市东城区人民法院"]}
1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
{"姓名": "小陈", "手机": "13965231525", "地址": ["广东省", "东莞市", "", "凤岗镇", "凤平路13号"]}
1!杜漆,广东省佛山市13461195416顺德区北滘镇桃村幼儿园.
{"姓名": "杜漆", "手机": "13461195416", "地址": ["广东省", "佛山市", "顺德区", "北滘镇", "桃村幼儿园"]}
1!司空喝,广东省汕头市潮南区两英镇新圩村新英路43-45号墙新铁店13742161920.
{"姓名": "司空喝", "手机": "13742161920", "地址": ["广东省", "汕头市", "潮南区", "两英镇", "新圩村新英路43-45号墙新铁店"]}
2!蒲诚,广东省汕头市濠13798786108江区达濠街道海旁路10号达濠派出所.
{"姓名": "蒲诚", "手机": "13798786108", "地址": ["广东省", "汕头市", "濠江区", "达濠街道", "海旁路", "10号", "达濠派出所"]}
2!郁蕾喘,海18807961204南省海口秀英区长流镇美李小学.
{"姓名": "郁蕾喘", "手机": "18807961204", "地址": ["海南省", "海口市", "秀英区", "长流镇", "", "", "美李小学"]}

覆盖率

调用python的coverage模块

六.异常处理

1.第六级地址少了"弄"这个情况
样例: 2!后应楼,上海市宝山区大场镇上大13060247654路1329弄祁连3村.
正确答案: {"姓名":"后应楼","手机":"13060247654","地址":["上海","上海市","宝山区","大场镇","上大路","1329弄","祁连3村"]}

2."街道"和"街"是有区别的,"街道"是第四级,"街"是第五级
样例:1!钭隆箍,山西省阳泉市13100299356矿区赛鱼街道麻地巷32号楼.
正确答案:{"姓名": "钭隆箍", "手机": "13100299356", "地址": ["山西省", "阳泉市", "矿区", "赛鱼街道", "麻地巷32号楼"]}

七.完善PSP表格

见第二部分PSP表格

posted on 2019-09-29 20:38  zpyan  阅读(242)  评论(2编辑  收藏  举报