第一次编程作业

1github地址

https://github.com/wangqin031702335/031702335/tree/master

2psp表格

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

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

题目

公司给实习生小王安排了一个任务,要求将一份客户地址规范化处理,地址簿原先是这样的:
王先生,13756899511,福建福州闽侯上街镇福州大学.陈先生,15063321552,福建省福州市鼓楼区鼓西街道湖滨路233号.
这样的地址不够规范,公司要求小王将地址规范化为如下的字典格式,并存储为json文件:
[{"姓名":"王先生","手机":"13756899511","地址":["福建省","福州市","闽侯县","上街镇","福州大学"]},
{"姓名":"陈先生","手机":"15063321552","地址":["福建省","福州市","鼓楼区","鼓西街道","湖滨路233号"]}]
可是小王不仅没完成任务,还把原始文件弄乱了,手机号码被混杂在地址数据中,请帮小王恢复文件并完成他的任务。
文件现状:
李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
张三,福建福州闽13599622362侯县上街镇福州大学10#111.
王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
小陈,广东省东莞市凤岗13965231525镇凤平路13号.
请把文件格式化为如下形式:
[{"姓名"':"李四","手机":"13756899511","地址":["福建省","福州市","鼓楼区","鼓西街道", "湖滨路110号湖滨大厦一层"]},
{"姓名":"张三","手机":"13599622362","地址":["福建省","福州市","闽侯县","上街镇", "福州大学10#111"]},
{"姓名":"王五","手机":"18960221533","地址":["福建省","福州市","鼓楼区","","五一北路123号福州鼓楼医院"]},
{"姓名":"小美","手机":"15822153326","地址":["北京","北京市","东城区","","交道口东大街1号北京市东城区人民法院"]},
{"姓名":"小陈","手机":"13965231525","地址":["广东省","东莞市","","凤岗镇","凤平路13号"]}]
请注意:
1.直辖市与一般城市的匹配区别,如样例中的小美。
2.手机号码一定不会和地址中的数字相邻,即不会出现福州市西二环路11380502116922号或者福州大学30#31395521336233这样的情况。
3.地址最终格式应为["直辖市/省","直辖市/市","区/县/县级市","街道/镇/乡","详细地址"]
4.该难度题目不会出现违背题目规则的异常样例。
当你把该任务做好之后,产品经理突发奇想,让你进一步匹配详细地址,进而区分出详细地址中的街道、道路名、门牌号等信息,文件则因变成:
[{"姓名":"李四","手机":"13756899511","地址":["福建省","福州市","鼓楼区","鼓西街道","湖滨路","110号","湖滨大厦一层"]},
{"姓名":"张三","手机":"13599622362","地址":["福建省","福州市","闽侯县","上街镇","","","福州大学10#111"]},
{"姓名":"王五","手机":"18960221533","地址":["福建省","福州市","鼓楼区","","五一北路","123号","福州鼓楼医院"]},
{"姓名":"小美","手机":"15822153326","地址":["北京","北京市","东城区","","交道口东大街","1号","北京市东城区人民法院"]},
{"姓名":"小陈","手机":"13965231525","地址":["广东省","东莞市","","凤岗镇","凤平路","13号",""]}]
请注意:该难度题目中,并非所有的路都叫XX路,也可能叫XX街,XX巷,需自行搜集数据。
产品经理还有个大胆的想法,但是已经被大部分程序员打爆了,没人愿意做,如果你觉得你做得来,可以试一试。地址簿中存在 福建福州市公园路15号 这样的地址,希望能利用地图数据自动补全缺省信息,将其格式化为["福建省","福州市","仓山区","公园路","15号"]或者更完善的形式。

思路

前人的血泪史告诉我不该用c++编程,于是花了半天学习了Python的语法,讲道理只是看是没有用的,毕竟只是囫囵吞枣,所以在实现过程中也是疯狂百度函数的具体使用
五级地址和七级地址的实现过程是有重合的地方的,所以在实现分割七级地址的时候调用五级地址的函数之后,再进行分割就好了
分割难度等级、姓名的时候,都可以用split()函数,分别用“!”和“,”进行分割
分割电话号码首先要用正则表达式将字符串中的数字串筛选出来,然后根据数字串的位数判断哪个是电话号码
利用cpca库将纯地址分割成四级地址,再利用关键字查询分割成五级地址

流程图

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


刚开始搜索的时候,对省市区是采用关键词搜索,但是后来发现有些会出现地址缺失,因此引进了模块cpca,能够自动匹配省市区,能够省去很多麻烦。

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

输入
1!卞继主,黑15241257071龙江省齐齐哈尔市建华区卜奎街道鑫海家园B7号楼.
1!庾感裤,宁夏回族自治区中卫沙坡头区砖塔13963011320村卫生室.
2!宦塌骨,北京市丰台区马家堡街道角门南路13865443474甲14号富卓苑小区.
1!宫焊,上海市虹桥街道中山西路1065号中山广场15038265133B座.
1!宁枪裂,北京市平谷区滨河街道林荫18883080553北路7号金谷东园7号楼.
输出
{"姓名": "卞继主", "手机": "15241257071", "地址": ["黑龙江省", "齐齐哈尔市", "建华区", "卜奎街道", "鑫海家园B7号楼"]}
{"姓名": "庾感裤", "手机": "13963011320", "地址": ["宁夏回族自治区", "中卫市", "沙坡头区", "", "砖塔村卫生室"]}
{"姓名": "宦塌骨", "手机": "13865443474", "地址": ["北京", "北京市", "丰台区", "马家堡街道", "角门南路", "甲14号", "富卓苑小区"]}
{"姓名": "宫焊", "手机": "15038265133", "地址": ["上海", "上海市", "", "虹桥街道", "中山西路1065号中山广场B座"]}
{"姓名": "宁枪裂", "手机": "18883080553", "地址": ["北京", "北京市", "平谷区", "滨河街道", "林荫北路7号金谷东园7号楼"]}

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

1

在程序运行中很显然会出现数据结构错误如:字典键值缺失——KeyError。
解决方法:try ... except ... 处理异常并构造强力数据,保证代码全被覆盖到。

2

当数据可能是极端数据(边界数据)时,会导致程序无法承受的错误,甚至无法继续运行下去。
例如:index out of range。
解决方案:构造边界数据,并使用try ... except ...处理异常

3

当网络出现波动时,API调用出现问题。
解决方法:这时应该考虑sleep主线程,并及时保护现场,将数据写入指定文本。

posted on 2019-09-29 22:11  王嵚  阅读(139)  评论(4编辑  收藏  举报