第一次个人编程作业!
1.GitHub链接
2.PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(min) | 实际耗时(min) | |
Planning | 计划 | 60 | 40 | |
Estimate | 估计这个任务需要多少时间 | 30 | 20 | |
Development | 开发 | 300 | 300 | |
Analysis | 需求分析 (包括学习新技术) | 300 | 350 | |
Design Spec | 生成设计文档 | 60 | 40 | |
Design Review | 设计复审 | 40 | 20 | |
Coding Standard | 代码规范(为开发制定合适的规范) | 30 | 20 | |
Design | 具体设计 | 60 | 60 | |
Coding | 具体编码 | 300 | 340 | |
Code Review | 代码复审 | 160 | 120 | |
Test | 测试(自我测试,修改,提交修改) | 180 | 180 | |
Reporting | 报告 | 60 | 60 | |
Test Report | 测试报告 | 30 | 20 | |
Size Measurement | 计算工作量 | 30 | 20 | |
Postmortem & Process Improvement Pla | 事后总结 并提出过程改进计划 | 30 | 30 | |
合计 | 1680 | 1620 |
3.计算模块接口的设计与实现过程
解题思路
在看到题目的时候,内心是想哭泣的,因为我知道以我目前的水平完全不可能解决。同时我还不会Python、Java,但听大家说Python会简单一些,所以一开始就决定用它。但是临时抱佛脚也是很难,就只能不断的百度,看其他人的博客,不断学习Python里的语法、函数等等,虽然还有很多没有搞懂。以下是我的主要解题思路:
- 首先我将题目的输出格式确定,通过正则表达式提取输入的号码、人名并删去它们以及一些标点和等级,最后剩下单纯的地址字符串
- 开始划分地址。根据每级地址的关键字通过正则表达式来划分,当不存在是,就设为空。识别每一级的地址,保存在输出的地址数组中后将它从输入的地址字符串删除。(第一级地址,我采用判断语句的暴力求解,因为实在想不到更好的方法了...)
- 最后就是调用输出函数了
主要代码
sf= input('')
sf=sf[:-1]#删去末尾的'.'
pf={
'姓名':'',
'手机':'',
'地址':[],
}
#提取难度级别并删去
level=sf[0]
sf=sf.split(r'!')
sf=sf[1]
#提取号码并删去
telnum=re.findall("\d{11}",sf)
telnum=telnum[0]
sf=re.sub(r'\d{11}','',sf)
#提取人名并删去
name=re.sub(r',.*$',"",sf)
sf=re.sub(name,'',sf)
sf=re.sub(r',','',sf)#删去逗号
pf['姓名']=name
pf['手机']=telnum
#第二级地址
city={'市','地区','盟','自治州'}
for b in first:
if b in direct_cities:
second=b
second+='市'
break
for c in city:
if c in sf:
second=re.sub(c+'.*$',"",sf)
second+=c
sf=sf.replace(second,'',1)#删去第二级地址
break
else:
second=''
pf['地址'].append(second)
4.计算模块接口部分的性能改进
只用了Visio C++中的性能分析,对计算机模块接口部分进行了分析(感觉不是很好)
5.计算模块部分单元测试展示
输入
1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
1!王五,宁夏银川金凤18960221533区正源北街301号人民医院.
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
2!郑晓,北京市丁兰街道环丁路10号明珠15244068259.
2!张丽,吉林省白城市洮南市团结街道兴安南街5566号安泰社区公共事务13949401891服务中心.
2!李丽,13585841307浙江舟山市普陀区六横镇台兴路202号台门中学.
2!小球,浙江省温州市文成县南田镇朱宅路20号南田15217337889镇人民*.
3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
输出
{"姓名": "小陈", "手机": "13965231525", "地址": ["广东省", "东莞市", "", "凤岗镇", "凤平路13号"]}
{"姓名": "王五", "手机": "18960221533", "地址": ["宁夏回族自治区", "", "银川金凤区", "", "正源北街301号人民医院"]}
{"姓名": "张三", "手机": "13599622362", "地址": ["福建省", "", "福州闽侯县", "上街镇", "福州大学10#111"]}
{"姓名": "李四", "手机": "13756899511", "地址": ["福建省", "福州市", "鼓楼区", "鼓西街道", "湖滨路", "110号", "湖滨大厦一层"]}
{"姓名": "王五", "手机": "18960221533", "地址": ["福建省", "福州市", "鼓楼区", "", "五一北路", "123号", "福州鼓楼医院"]}
{"姓名": "郑晓", "手机": "15244068259", "地址": ["北京", "", "", "丁兰街道", "环丁路", "10号", "明珠"]}
{"姓名": "张丽", "手机": "13949401891", "地址": ["吉林省", "白城市", "洮南市团结街道兴安南街5566号安泰社区", "", "", "公共事务服务中心"]}
{"姓名": "李丽", "手机": "13585841307", "地址": ["浙江省", "舟山市", "普陀区", "六横镇", "台兴路", "202号", "台门中学"]}
{"姓名": "小球", "手机": "15217337889", "地址": ["浙江省", "温州市", "文成县", "南田镇", "朱宅路", "20号", "南田镇人民*"]}
{"姓名": "小美", "手机": "15822153326", "地址": ["北京", "东城区交道口东大街1号北京市", "东城区", "", "", "人民法院"]}
覆盖率
用测评系统测出为64%
6.计算机模块部分异常处理说明
如果出现直辖市,无法将其写成两级,如北京市--->北京北京市,输出会出现错乱(因为我第一级地址的划分是暴力手段,所以第二级地址就比较难处理,但是我觉得我应该可以的,不过时间有点不足,所以没再修正)
例如:上面的“郑晓”的例子- 附加题,我有了解到可以用Python爬虫百度地图,通过API求解,不过这种方法可能会造成使地址太过详细化,多出不需要的信息,所以就没有补充了,而且对于爬虫我也不大懂...
- 没有考虑到输入姓名或者电话号码为空的情况
-
地址中出现以市等命名的地点时,会出错,如出现北京市人民*
例如:输入:
3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.输出
{"姓名": "小美", "手机": "15822153326", "地址": ["北京", "东城区交道口东大街1号北京市", "东城区", "", "", "人民法院"]}7.总结
做完整个题目,感觉自己真的有点酷,虽然很多都是向别人寻求帮助或者百度一下你就知道,但是感觉自己好久没打这么多的代码了(因为我很菜),而且还是一门自己完全没有接触的语言。让我对于计算机又靠近了0.0000001mm呢!!!不过Python我还有很多没有搞清楚,比如正则表达式、爬虫,还有一些很基础的语法问题。
一门语言真是博大精深(令人头秃....)啊!!!!!