第一次个人编程作业
一.仓库地址
二. PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 30 |
| · Estimate | · 估计这个任务需要多少时间 | 30 | 30 |
| Development | 开发 | 625 | 1005 |
| · Analysis | · 需求分析 (包括学习新技术) | 120 | 530 |
| · Design Spec | · 生成设计文档 | 10 | 10 |
| · Design Review | · 生成设计文档 | 5 | 5 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
| · Design | · 具体设计 | 60 | 60 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 300 | 330 |
| Reporting | 报告 | 60 | 30 |
| · Test Repor | · 测试报告 | 10 | 20 |
| · Size Measurement | · 计算工作量 | 5 | 5 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 300 |
| · 合计 | | 710| 1110|
三.解题思路
想法主要是用正则表达式现把名字和电话号码还有匹配数字、‘省’、‘市’等关键字,然后把他们丢到json里面
1.先从逗号为分隔符,把名字提取出来
2.再用正则表达式把电话号码提取出来
3.每次匹配把‘省’,‘市’,‘区’等的内容提取出来
4.每次提取出来后把不需要的内容删除,剩下的就是详细的地址了
四、计算模块接口的设计与实现过程
| 表头 | 表头 |
|---|---|
| get_phone(can) | 获得电话号码 |
| get_province(can) | 获得省 |
| get_city(can) | 获得城市 |
| get_qu(can) | 获得区 |
| get_zheng(can) | 获得镇 |
| get_lu(can) | 获得路 |
| get_hao(can) | 获得号 |
流程图如下

- 以下是我的代码部分:
province_zhixia = ['北京', '天津', '上海', '重庆']
def get_province(can):
if(can[0:2] in province_zhixia):
ret = can[0:2]
return ret
else:
if(re.search(("(.*?省)|(.*?自治区)"), can) != None):
ret = re.search(("(.*?省)|(.*?自治区)"), can)
else:
if(can[0:3] == "黑龙江"):
return "黑龙江"
else:
return (can[0:2])
return ret.group(0)
**功能实现代码:**
def get_phone(can):
ret = re.search(r'\d{11}', can)
if ret == None:
return ""
else:
return ret.group(0)
def get_province(can):
if(can[0:2] in province_zhixia):
ret = can[0:2]
return ret
else:
if(re.search(("(.*?省)|(.*?自治区)"), can) != None):
ret = re.search(("(.*?省)|(.*?自治区)"), can)
else:
if(can[0:3] == "黑龙江"):
return "黑龙江"
else:
return (can[0:2])
return ret.group(0)
def get_city(can):
if(re.search(".*?市", can) != None):
return (re.search(".*?市", can)).group(0)
else:
return ''
def get_qu(can):
if(re.search(("(.*?区)|(.*?县)|(.*?区)"), can) != None):
return (re.search(("(.*?区)|(.*?县)|(.*?区)"), can)).group(0)
else:
return ''
def get_zheng(can):
if(re.search(("(.*?街道)|(.*?镇)|(.*?乡)"), can) != None):
return (re.search(("(.*?街道)|(.*?镇)|(.*?乡)"), can)).group(0)
else:
return ''
def get_lu(can):
if(re.search(".*?路", can) != None):
return (re.search(".*?路", can)).group(0)
else:
return ''
def get_hao(can):
if(re.search(".*?号", can) != None):
return (re.search(".*?号", can)).group(0)
else:
return ''
五.计算模块接口部分的性能改进
性能分析图:
存在一些问题,还在更进中

函数调用流程图

六.计算模块部分单元测试展示
- 单元测试的主要内容是测试省份
测试覆盖率:

七.异常处理
还是有蛮多的bug,但是我想异常处理只有输入的问题了
例如:
- !李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层(没有难度)
2!李四,福建省福州13756899市鼓楼区鼓西街道湖滨路110号湖滨大厦一层(电话号码不全)
2!李四福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层(格式不规范)
2!,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层(没有名字)
八.总结
不该作业放在最后两天完成简直太难了,本来计划是用C++写的代码,但是写道一半发现实现不了,就开始转战python,一天学习,一天写代码,差点把自己给搞死,中间还有很多烦人的事实,说实话,软件工程,真的刺激。我太难了啊。。。。。。。。。

浙公网安备 33010602011771号