第一次个人编程作业
1.本次作业的github地址链接:
https://github.com/252342126/181700413
2.PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟)|
| -------- | -------- | -------- |
| Planning |计划 | 30
|Estimate |估计这个任务需要多少时间 |30
|Development |开发 |500
|Analysis |需求分析 (包括学习新技术) |10
|Design Spec |生成设计文档 |0
|Design Review |设计复审 |0
|Coding Standard|代码规范 |20
|Design |具体设计 |100
|Coding |具体编码 |200
|Code Review |代码复审 |20
|Test |测试 |150
|Reporting |报告 |80
|Test Repor |测试报告|10
|Test Repor |计算工作量 |10
|Postmortem & Process Improvement Plan|事后总结, 并提出过程改进计划|60
| |合计|610
3.计算模块接口的设计与实现过程
我以输入 2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.为例
1.我写了一个函数叫split_string,把名字,电话,难度等级,还有地址提取出来,存在字典中,在这个例子中,处理完后得到{'name': '王五', 'telephone': '18960221533', 'address': '福建省福州市鼓楼区五一北路123号福州鼓楼医院'},之后把address的那一栏拿出来做进一步处理。
2.在我的文件目录下还有一个文本文件,那个文件里面存的是省级和市级的数据,我的另外一个函数叫alladdress,就是用来将文件里面的信息保存成字典,用来进行后续的判断
3.现在就进行地址的拆分,对于福建省福州市鼓楼区五一北路123号福州鼓楼医院,我先匹配省级,我调用find函数来找省级,如果找到了之后根据已经存储好的字典去继续匹配市级,没找到就把省市两级都存为空,找县级,这也就导致了后面的一个异常问题,就是我会把上海路中的上海,匹配成省级,因为上海放在比较前面。如果找到了具体的省市,就相应的存下来,再判断有没有省市这两个后缀,找完之后,截断,变成"鼓楼区五一北路123号福州鼓楼医院",再进行下一步操作
4.现在开始匹配县级,由于县级以及之后的数据都比较大,我就没有存在文件里面,而是根据后缀匹配,县级的常见后缀有"县""区""市",我把这三个存在一个列表中,遍历列表,根据这个来截断字符串,当然,其中也会有问题,像遇到"超市",就可能会被错误的截断,但是我也做不到全部考虑到,这个也没改,截断之后变成"五一北路123号福州鼓楼医院"
5.后面用同样的方法匹配接下来的几级,每级都进行截断,匹配完后,最后剩下的"福州鼓楼医院"就是最后一级地址
6.最后把每级地址用列表存下来,再把列表存在字典里,最后用python自带的工具把字典转为json文件格式
最后结果为{"姓名": "王五", "手机": "18960221533", "地址": ["福建省", "福州市", "鼓楼区", "", "五一北路", "123号", "福州鼓楼医院"]}
但是这个并不能解决三级的问题,但是我没有去用百度地图的api,算是放弃了三级,下次再去学吧。
4.计算模块接口部分的性能展示。
本来想改进的,但是我觉得在设计的时候已经尽量做节约时间和空间的操作了,似乎没有多少要改进的,就在遇到一些特殊的情况的时候多加了一些判断,像我的县级判断,我一开始是"市""区""县"的顺续,后面改成了"县""区""市",感觉县的后缀要少一些吧,先匹配会好点
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.计算模块部分异常处理说明
3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
错误输出:{"姓名": "小美", "手机": "15822153326", "地址": ["北京", "北京市", "东城区", "", "交道", "口东大街1号", "北京市东城区人民法院"]}
原因:把"道"字当做了乡镇级别的名字,这里不好解决,三级的我也没做,这个只有补全了乡镇级别的匹配才能解决问题。
2!柳吻,辽宁省大连市中山区青泥13013864707洼桥街道上海路45号宏孚大厦苏宁易购.
错误输出:{"姓名": "柳吻", "手机": "13013864707", "地址": ["上海", "上海市", "省大连市中山区", "青泥洼桥街道", "上海路", "45号", "宏孚大厦苏宁易购"]}
原因:在省级匹配的时候先匹配到了"上海",导致后面几级都出现了错误
1!佘吏,浙江省湖州市和孚镇李市村15054267850获港大桥南堍费伟民疼痛诊所.
错误输出:{"姓名": "佘吏", "手机": "15054267850", "地址": ["浙江省", "湖州市", "和孚镇李市", "", "村获港大桥南堍费伟民疼痛诊所"]}
原因:本来应该是县级缺失,但是由于匹配到"李市",错误的当做县级,导致错误
7.完整PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 60 |
Estimate | 估计这个任务需要多少时间 | 30 | 60 |
Development | 开发 | 500 | 600 |
Analysis | 需求分析 (包括学习新技术) | 10 | 130 |
Design Spec | 生成设计文档 | 0 | 0 |
Design Review | 设计复审 | 0 | 0 |
Coding Standard | 代码规范 | 20 | 30 |
Design | 具体设计 | 100 | 160 |
Coding | 具体编码 | 200 | 220 |
Code Review | 代码复审 | 20 | 30 |
Test | 测试 | 150 | 30 |
Reporting | 报告 | 80 | 360 |
Test Repor | 测试报告 | 10 | 290 |
Test Repor | 计算工作量 | 10 | 10 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 60 | 60 |
合计 | 610 | 1020 |
8.个人总结
这次的任务对我还是还是有点困难的,难在很多特殊情况难以解决,而很多都需要靠收集数据,用更好的处理方法来解决,而这方面我是比较薄弱的,我不太会收集数据,以后这方面要加强