Github传送门
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 30 |
· Estimate | · 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | 480 | 600 |
· Analysis | · 需求分析 (包括学习新技术) | 60 | 100 |
· Design Spec | · 生成设计文档 | 20 | 40 |
· Design Review | · 设计复审 | 10 | 20 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 20 |
· Design | · 具体设计 | 30 | 20 |
· Coding | · 具体编码 | 180 | 240 |
· Code Review | · 代码复审 | 30 | 60 |
· Test | · 测试(自我测试,修改代码,提交修改) | 45 | 60 |
Reporting | 报告 | 30 | 35 |
· Test Report | · 测试报告 | 20 | 25 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 10 |
· 合计 | 965 | 1280 |
计算模块接口的设计与实现过程
解题思路
因为难度三的题对我来说有一定难度,而且时间上绝对来不及,因此只考虑前两级难度的题。思路就是取出来再从字符串里删掉。因为Python是现学的,所以写法也很菜,基本上就是用正则匹配,search,sub,append从头用到尾。依次取出难度,姓名,手机号,并把它们从字符串中去除,同时也除去“!”,“,”和结尾的“.”。然后一级行政区,二级行政区一级一级处理下来。行政区要先从网上了解具体的划分是怎样的,字数如何,有哪些特别情况,还要注意省、市、县字的缺失,以及市级、县级的整级缺失。对于缺失问题,从网上导入了市级和县级列表。根据匹配到的难度决定是否继续细分(难度一,难度二)。
关键代码
三级行政区处理如下,其他级别类似,视具体情况做改变。
r = re.search("(.*?区)|(.*?县)|(.*?旗)|(.*?市)", s)
if r == None:#县后缀缺失/整个级缺失
a = 0
for i in sanji:
if s[0:2] in i:#县后缀缺失
result.append(i + '县');s = re.sub(s[0:(len(i + '县')-1)],'',s,1)
a = 1
break
if a == 0:
result.append('')#整个级缺失
else:#返回不为None,无缺失,找到了
result.append(r.group(0));s = re.sub(s[0:(len(r.group(0)))],'',s,1)#放入列表,用sub去除
计算模块接口部分的性能改进
使用pycharm专业版的Profile Run进行性能分析,结果其实看不太懂,遍历二三级数据列表的时候浪费了很大一部分的时间。
另外测了十个数据,覆盖率在60%上下浮动,挺低的……还有我应该把各级地址处理分别封装成一个个函数的
计算模块部分单元测试展示
输入输出
天枢星评测系统评测得分
输入:
(括号内为覆盖率(%))
1!卞继主,黑龙江省齐齐哈尔建华区卜奎街道鑫海15241257071家园B7号楼.(55)
1!庾感裤,宁夏回族自治区13963011320中卫市沙坡头区砖塔村卫生室.(54)
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.(64)
2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.(64)
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.(58)
1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.(61)
2!宦塌骨,北京市丰台区马家堡街道角门南路甲14号13865443474富卓苑小区.(53)
1!家基,江苏省连云港市18828767011赣榆区海头镇赣柘线盐仓城村村委会.(56)
1!钭隆箍,山西省阳泉市13100299356矿区赛鱼街道麻地巷32号楼.(56)
2!后应楼,13060247654上海市宝山区大场镇上大路1329弄祁连3村.(53)
输出:
{'姓名': '卞继主', '手机': '15241257071', '地址': ['黑龙江省', '齐齐哈尔建华区', '', '卜奎街道', '鑫海家园B7号楼']}
{'姓名': '庾感裤', '手机': '13963011320', '地址': ['宁夏回族自治区', '中卫市', '沙坡头区', '', '砖塔村卫生室54']}
{'姓名': '王五', '手机': '18960221533', '地址': ['福建省', '福州市', '鼓楼区', '', '五一北路', '123号', '福州鼓楼医院']}
{'姓名': '李四', '手机': '13756899511', '地址': ['福建省', '福州市', '鼓楼区', '鼓西街道', '湖滨路', '110号', '湖滨大厦一层']}
{'姓名': '张三', '手机': '13599622362', '地址': ['福建省', '福州市', '闽侯县', '上街镇', '福州大学10#111']}
{'姓名': '小陈', '手机': '13965231525', '地址': ['广东省', '东莞市', '', '凤岗镇', '凤平路13号']}
{'姓名': '宦塌骨', '手机': '13865443474', '地址': ['北京', '北京市', '丰台区', '马家堡街道', '角门南路', '甲14号', '富卓苑小区']}
{'姓名': '家基', '手机': '18828767011', '地址': ['江苏省', '连云港市', '赣榆区', '海头镇', '赣柘线盐仓城村村委会']}
{'姓名': '钭隆箍', '手机': '13100299356', '地址': ['山西省', '阳泉市', '矿区', '赛鱼街道', '麻地巷32号楼']}
{'姓名': '后应楼', '手机': '13060247654', '地址': ['上海', '市', '宝山区', '大场镇', '上大路', '', '1329弄祁连3村']}
计算模块部分异常处理说明
一开始代码是在EditPlus上面写的,因为Python也是现学的,缩进全用了tab,粘贴到编译器就傻眼了,研究了20分钟才发现要用空格。匹配到的难度是字符,不是数字。还有就是去除字符串中匹配的部分时,没有指明sub删除的次数,导致类似“福建福州……福州大学”这样的地址最后一级输出只有“大学”。其他异常暂时没发现。
总结
就是,我好菜啊……一开始写的C++,后来目睹了隔壁宿舍同学优雅地敲出简洁的Python代码,我就毅然地弃那写了两个小时的C++代码从了迷人的Python,自学了两个小时多就开始用我那可怜的知识量吭哧吭哧地写代码了。解题其实用到的就那么几个方法,写了好久总算是写完了,对Python有了一点初步的了解。这次作业使我的分析问题解决问题的能力有了进一步的提高。做这种作业的感觉还是不错的,虽然很烦,但让我体会到了更真切的学习计算机的感觉。