1.本次作业的github地址链接:
https://github.com/curtain0/181700144
2.PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 25 | |
Estimate | 估计这个任务需要多少时间 | 15 | |
Development | 开发 | 1000 | |
Analysis | 需求分析 (包括学习新技术) | 120 | |
Design Spec | 生成设计文档 | 10 | |
Design Review | 设计复审 | 30 | |
Coding Standard | 代码规范 | 30 | |
Design | 具体设计 | 60 | |
Coding | 具体编码 | 180 | |
Code Review | 代码复审 | 120 | |
Test | 测试 | 60 | |
Reporting | 报告 | 120 | |
Test Repor | 测试报告 | 20 | |
Test Repor | 计算工作量 | 10 | |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | ||
合计 | 1800 |
3.计算模块接口的设计与实现过程
1、解题思路:
首先本题是典型的字符串问题,对于字符串问题一直是自己的弱项。但是学习了paython,发现其对于字符串有其特有的优势。经过看题思考,本题需要用正则表达式来解决问题。对于给定的字符串,我们首先需要对,对其进行分割,将名字、电话、地址先分开;然后将剩下的地址再进行分级处理。在此之前还需提取出难度标识,通过难度标识的量级,判断进行什么操作。至于地址分级,则需要正则匹配,通过后缀进行匹配。(这是最苦逼的过程bug满天飞)
2、解题步骤:
(1)先在记事本上把所有的一级二级地名编辑好(即直辖市与省、自治区等),创建一个工程,保存在同一个工程下,用with open调用
(2)写一个函数用于分离字符串,先提取难度标识,然后分离成名字、电话、地址
(3)先把分离的名字电话存起来,然后删除掉,剩下地址部分。接着进行地址的分离,字符串匹配。把找到的分离出来,保存输出,重复操作。
(4)最后输出,转成json文件
可以使用到的函数str.split() str.find() str.complie() str.sub() str.replace()
3、设计的具体实现
with open('address_query.txt','r')as file_obj: //文件的读入
def split_string(str): //分割字符串
主要过程与代码
for i in data:
lists = []
cnt = 0
for j in data[i]:
if (j == ""):
lists.append(cnt)
cnt = cnt + 1
for list in lists:
data[i].pop((int)(list))
for i in data:
if (address.find(i) != -1):
add['province'] = i
if (i == '北京' or i == '上海' or i == '天津' or i == '重庆'):
add['province'] = i
add['city'] = i + '市'
if (address.find('市') != -1):
address = address[address.find('市') + 1:]
else:
address = address[2:]
else:
if (i != '广西壮族自治区' and i != '内蒙古自治区' and i != '新疆维吾尔自治区' and i != '宁夏回族自治区'):
add['province'] = add['province'] + '省'
for j in data[i]:
city = j[0:-1]
if (address.find(city) != -1):
add['city'] = j
if (address.find('市') != -1 and address[address.find('市') - 1] == city[-1]):
address = address[address.find('市') + 1:]
else:
address = address[address.find(city[-1]) + 1:]
break
else:
add['province'] = ""
add['city'] = ""
4.计算模块接口部分的性能改进。
5.计算模块部分单元测试
2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
{"姓名": "李四", "电话": "13756899511", "地址": ["福建省", "福州市", "鼓楼区", "鼓西街道", "湖滨路", "110号", "湖滨大厦一层"]}
3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
{"姓名": "王五", "电话": "18960221533", "地址": ["福建省", "福州市", "鼓楼区", "", "五一北路", "123号", "福州鼓楼医院"]}
1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
{"姓名": "小陈", "电话": "13965231525", "地址": ["广东省", "东莞市", "", "凤岗镇凤平路13号", "凤平路13号"]}
6.计算模块部分异常处理说明。
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
"姓名": "张三", "电话": "13599622362", "地址": ["福建省", "福州市", "闽侯县", "上街镇福州大学10#111", "福州大学10#111"]
本例为五级地址,但是到镇的时候,没有分离成功。
3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
"姓名": "小美", "电话": "15822153326", "地址": ["北京", "北京市"]}
当标识难度为3的时候,不会补全。菜鸡不配做这步
1!佘吏,浙江省湖州市和孚镇李市村15054267850获港大桥南堍费伟民疼痛诊所.
"姓名": "佘吏", "电话": "15054267850", "地址": ["浙江省", "湖州市", "和孚镇李市", "", "村获港大桥南堍费伟民疼痛诊所"]}
当遇到镇,以及村的时候,没有正确分离。
7.完整PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 30 |
Estimate | 估计这个任务需要多少时间 | 10 | 15 |
Development | 开发 | 1000 | 1200 |
Analysis | 需求分析 (包括学习新技术) | 120 | 100 |
Design Spec | 生成设计文档 | 10 | 20 |
Design Review | 设计复审 | 30 | 20 |
Coding Standard | 代码规范 | 30 | 10 |
Design | 具体设计 | 60 | 30 |
Coding | 具体编码 | 180 | 300 |
Code Review | 代码复审 | 120 | 80 |
Test | 测试 | 60 | 60 |
Reporting | 报告 | 120 | 90 |
Test Repor | 测试报告 | 20 | 10 |
Test Repor | 计算工作量 | 10 | 30 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 100 | 120 |
合计 | 1800 | 2115 |
心得体会
1、通过本次实践,让自己意识到还有很多的不足需要改进。例如:代码能力不强,找bug调试能力需要提高。很多东西考虑不全面,逻辑不够严谨
2、经过这次作业,巩固了所学的知识,同时学习了很多新知识。例如python的正则匹配。
3、最后一句话总结这次作业:我太难了!!!!!