第一次个人编程作业

##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......以此类推)

第一次个人编程作业_第1张图片

主要代码(函数):



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

单元测试:


输入:

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的压力,也学到了很多新的东西,和大佬们的差距好大,好好学习吧

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