第一次个人编程作业

Github链接

PSP表格

PSP Personal Software Process Stages 预计耗时(分钟) 实际耗时(分钟)
Planning 计划 40 50
Estimate 估计这个任务需要多少时间 60 50
Development 开发 300 400
Analysis 需求分析 (包括学习新技术) 300 390
Design Spec 生成设计文档 30 20
Design Review 设计复审 30 30
Coding Standard 代码规范 (为目前的开发制定合适的规范) 20 30
Design 具体设计 30 30
Coding 具体编码 420 500
Code Review 代码复审 40 30
Test 测试(自我测试,修改代码,提交修改) 120 150
Reporting 报告 30 20
Test Report 测试报告 20 30
Size Measurement 计算工作量 30 30
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 40 50
Total 合计 1510 1810

计算模块与接口的设计与实现

分析题意后,容易想到先把姓名、手机和难度提取出来,剩下的就是对地址的操作。根据不同的难度将地址分为五级或或级。由于前面的四级地址相对比较固定,可以考虑从百度一个存有四级地址的表。这样处理前四级的地址就可以从这个表中进行查找。如果leval == 1就把剩下的归为第五级地址,否则就判断地址中是否含有该级地址的关键字直到第七级。
考虑到代码实现的困难程度,决定使用Python实现。
主要用到的函数有

getNums(cur_addr): 获取手机号码
delNums(cur_addr): 删除手机号码
getLvx(cur_addr, cur_path): 获取第x级的地址

首先读入四级地址的.json文件。通过json.load()转换成字典。
获取x(x<=4)级地址时通过在当前地址中查找是否含有第x级地址的某个地址来判断该级地址是否缺失。直辖市,自治区需要特殊判断。
处理手机号和5-7级地址时主要用正则表达式匹配

计算模块接口部分的性能改进

测试8组数据用时40ms,绝大部分时间都花在json.load()上,处理数据量比较小的时候效率较低,可以考虑对输入输出进行优化(速成的Python,现在还不会)。数据规模巨大的时候对地址hash处理?好像能行,但是好像挺麻烦
第一次个人编程作业_第1张图片

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

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

计算模块部分单元测试展示

输入:

2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
2!高旦,14755894363甘肃兰州榆中县甘草店镇三墩营村卫生所.
1!司寇俱,湖北14736332425省随州市随县高城镇东华街6号高城镇人民政府.
1!幸懒雪,天津市河东区向阳楼街道阳安里4号楼15688316875.
1!弓诚,四川15370708858省涪城区城南街道跃进村村务监督委员会.

输出:

{"姓名": "李四", "手机": "13756899511", "地址": ["福建省", "福州市", "鼓楼区", "鼓西街道", "湖滨路", "110号", "湖滨大厦一层"]}
{"姓名": "张三", "手机": "13599622362", "地址": ["福建省", "福州市", "闽侯县", "上街镇", "福州大学10#111"]}
{"姓名": "王五", "手机": "18960221533", "地址": ["福建省", "福州市", "鼓楼区", "", "五一北路", "123号", "福州鼓楼医院"]}
{"姓名": "小美", "手机": "15822153326", "地址": ["北京", "北京市", "东城区", "交道口", "东大街", "1号", "北京市东城区人民法院"]}
{"姓名": "小陈", "手机": "13965231525", "地址": ["广东省", "东莞市", "", "市凤岗镇", "凤平路13号"]}
{"姓名": "高旦", "手机": "14755894363", "地址": ["甘肃省", "兰州市", "榆中县", "甘草店镇", "", "", "三墩营村卫生所"]}
{"姓名": "司寇俱", "手机": "14736332425", "地址": ["湖北省", "随州市", "随县", "高城镇", "东华街6号高城镇人民政府"]}
{"姓名": "幸懒雪", "手机": "15688316875", "地址": ["天津", "天津市", "河东区", "向阳楼街道", "阳安里4号楼"]}
{"姓名": "弓诚", "手机": "15370708858", "地址": ["四川省", "", "", "涪城区城南街道", "跃进村村务监督委员会"]}

前四级地址的确定是从字典中匹配完成的,而为了查找效率字典中四级地址是按照每一级来存储的,就比如查找福建省福州市...首先在第一级字典中查找福建,找到后在进入以福建为第一级地址的二级字典,以此类推找到前四级地址。这样比单纯从第x级暴力查找的效率高一些。对于前三级地址未缺失的地址都能比较正确地处理。但是对于前三级地址存在某一级地址缺失的情况下,由于不能在字典中找到相应的地址,就无法进入下一级的字典,造成后面的地址都为空。对于这个问题我并没有很好的解决QAQ。就比如最后一条弓诚的地址信息,由于缺少第二级地址导致第三级地址也为空(实际应该是培城区)导致错误。

计算模块部分异常处理

每次处理的时候加入tryexcept有异常就忽略或者直接返回。。。

小结

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