第一次个人编程作业

1、Github地址:

Github项目地址

2、PSP表格

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

2、模块接口的设计与实现过程

地址簿的原本排序是姓名、手机、地址,由于被人为破坏之后,地址可能会缺少省、市后缀,手机号码会移动到它原本位置之后任意位置,要求是将这个顺序不对的地址簿恢的姓名、手机和补全分好级的地址恢复到正确的顺序。当然补全地址是强者的游戏,我们普通观众只需要完成五级地址和七级地址的划分。对于中文的字符串而言,我觉得python的正则会比较易于使用,所以此次作业使用语言的是python,在匹配玩一个字段之后,会把这个字符串从总的字符串里删除,便于后面的操作。

函数名 应用
find_name() 从输入的字符串里切出名字
find_tel() 切出电话号码
find_address() 地址分级,有多个子函数
find_prov() 切出省份、直辖市或自治区
find_city() 切出直辖市或地级市
find_area() 切出区或县
find_street() 切出街道、镇或乡
find_road() 切出具体的路、巷或弄
find_number() 切出门牌号

主要用到的函数都在上面的表格中。对于一整串字符串的输入,正则表达式可以很好的实现匹配具体中文字符的功能主要是方便。对于整体输入而言,要求将姓名、手机号码和具体的分级的地址输出,首先,姓名和电话号码是最简单的:

  • 姓名是在‘!’和‘,’字符中间的,只需要匹配这两个字符就可以直接切出姓名
  • 手机号码号码是连续的11位数字,且不会与号码牌等数字混合在一起,所以至于要匹配连续的11位的数字就能找到手机号码

对比之下,地址分级是就显得比较复杂,尤其是省级行政区和市级行政区:

  • 首先是输入的省级行政区会有三种不同的形式:
  • 以‘省 ’结尾的普通省份
  • 以‘市’结尾的直辖市
  • 以‘自治区’结尾的自治区

但是,并不是所有的数据都会带有后缀,第一个问题就来了,如果出现“福建省福州市闽侯县……”“福建福州闽侯县……”这两种后缀不同的数据,直接正则匹配“省”的方法就不能同时奏效了。所以,打表,34个省份的数据存在一个列表中,使用字符串的前两个字符来匹配列表,直接输出列表中存在的完整的省份。
市级行政区(或者是直辖市的下辖区)的难点类似省级,都是无法判断是否有‘市’作为后缀,处于方便,全国的行政区也都打表,用于匹配。

  • 省、市分完之后,剩下的地址一般都是规则的带有后缀的,所以这个时候,正则大哥他又来了:

re.search("(.*?路)", s)就可以把剩下带有后缀的地址都匹配了

4、模块的接口性能分析


(还不是很会用就凑合看吧)

5、单元测试

In:2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.

Out:

In:1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.

Out:

In:2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.

Out:

In:1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.

Out:

6、心得体会

单元测试、性能分析、解决函数瓶颈提高性能、异常处理,要学的还有好多好多。

posted @ 2019-09-17 19:53  XZH34  阅读(210)  评论(3编辑  收藏  举报