第一次个人编程作业

测评的同学麻烦安装一个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张图片

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

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模块
第一次个人编程作业_第2张图片

六.异常处理

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

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

七.完善PSP表格

见第二部分PSP表格

你可能感兴趣的:(第一次个人编程作业)