##Github地址:https://github.com/S-lyn-0422/031702406
PSP表格:
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 60 |
Estimate | 估计这个任务需要多少时间 | 30 | 60 |
Development | 开发 | 5510 | 6380 |
-Analysis | 需求分析 (包括学习新技术) | 100 | 120 |
-Design Spec | 生成设计文档 | 100 | 100 |
-Design Review | 设计复审 | 120 | 130 |
-Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 120 | 140 |
-Design | 具体设计 | 4000 | 4320 |
-Coding | 具体编码 | 720 | 700 |
-Code Review | 代码复审 | 350 | 670 |
-Test | 测试(自我测试,修改代码,提交修改) | 120 | 135 |
Reporting | 报告 | 120 | 125 |
-Test Repor | 测试报告 | 60 | 60 |
-Size Measurement | 计算工作量 | 30 | 30 |
-Postmortem Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 35 |
合计 | 5720 |
解题过程:
题目的理解:
我对这道题一开始的理解是文字的划分,( 所以还想过用数组解决的笨方法)但注意观察过题目后,发现电话号码位置的错乱打乱了语序,是无法按照顺序划分的,因此,我最后采用正则表达式来进行划分。(以前完全没接触过,一堆符号看得头疼,大致了解之后,真香。这次完成作业的时间大部分都花在学习新知识上,好多不懂,我真是太菜了)
具体思路:
- 事先备注:
在每取出一次信息后,我会把该信息从信息字符串中去掉,防止具体地址和前面几级地址有重复的字符,发生错误,如:
“3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.”这个栗子,我一开始没有注意到这种情况,导致最后的具体地址中只剩下“人民法院”。 - 把难度标志符取出:
我观察到难度标志符后都为“!”,因此我通过正则表达式,以“!”为标志,将整个输入字符串s划分为两个分组,第一组为难度标志符,第二组为新的,接下来要操作的字符串,难度标志符取出后标为tag,我用在区分接下来七级地址和五级地址的划分。 - 把姓名取出:
由于姓名后面跟的都是“,”,所以用正则表达式匹配出结尾为‘,’的子字符串,由与分组后姓名在开始的位置,因此直接能取出姓名。 - 把十一位手机号码取出:
用相应的正则表达式将手机号码取出,去掉后可以发现词汇的组成正常了。 - 开始划分地址:
前面四级地址的划分是统一的,我是根据每级地址的关键词,省、市、县,用相应的正则表达式来划分的,当不存在这个词时,就将该级地址置空(!这样做有很大的错误,只能分出部分样例,当遇到“1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.、“交道口东大街1号北京市东城区人民法院”这种省略去关键字的例子时,划分就会出错,后来看了群聊,以及向大佬们请教,可能可以从调用API,或导入地图数据进行比对来解决问题,但是由于时间不太来得及,只能先放弃了,后面再去了解,菜到哭)
流程图:(每级地址的变量名分别为one、two......以此类推)
主要代码(函数):
op1=s.split(r'!')
tag=op1[0]#提取难度标识
s=op1[1]
s=s.replace(one,'',1)#删去自治区
one = re.sub(r'自治区.*$',"", s)#提取自治区
one+='自治区'
customer['地址'].append(three)#存进字典
性能测试:
单元测试:
输入:
2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
输出:
{"姓名": "李四", "手机": "13756899511", "地址": ["福建省", "福州市", "鼓楼区", "鼓西街道", "湖滨路", "110号", "湖滨大厦一层"]}
{"姓名": "张三", "手机": "13599622362", "地址": ["", "", "福建福州闽侯县", "上街镇", "福州大学10#111"]}
{"姓名": "王五", "手机": "18960221533", "地址": ["福建省", "福州市", "鼓楼区", "", "五一北路", "123号", "福州鼓楼医院"]}
{"姓名": "小美", "手机": "15822153326", "地址": ["北京", "北京市", "东城区", "", "交道口东大街", "1号", "北京市东城区人民法院"]}
{"姓名": "小陈", "手机": "13965231525", "地址": ["广东省", "东莞市", "", "凤岗镇", "凤平路13号"]}
异常处理:
小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
{"姓名": "小美", "手机": "15822153326", "地址": ["北京", "北京市", "东城区", "", "交道口东大街", "1号", "北京市东城区人民法院"]}
张三,福建福州闽13599622362侯县上街镇福州大学10#111.
{"姓名": "张三", "手机": "13599622362", "地址": ["", "", "福建福州闽侯县", "上街镇", "福州大学10#111"]}
(代码有缺陷,正则表达式是根据关键字写的,没有关键字无法正确划分,可能会出现空元素或划分错误)
心得总结:
这次的作业越做下去越发现还有一大堆东西要学,迫于ddl的压力,也学到了很多新的东西,和大佬们的差距好大,好好学习吧