第一次个人编程作业

一.GitHub地址

https://github.com/lylinyi/041702108

二.PSP表格

PSP2.1 Personal SoftwareProcess Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 90
·Estimate ·估计这个任务需要多少时间 30 40
Development 开发 820 1000
· Analysis · 需求分析(包括学习新技术) 120 240
· Design Spec · 生成设计文档 30 10
· Design Review · 设计复审 30 20
· Coding Standard · 代码规范(为目前的开发制定合适的规范) 30 30
· Design · 具体设计 30 60
· Coding · 具体编码 400 360
· Code Review · 代码复审 30 40
· Test · 测试(自我测试,修改代码,提交修改) 180 240
Reporting 报告 90 100
· Test Repor · 测试报告 40 30
· Size Measurement · 计算工作量 20 30
· Postmortem & Process Improvement Plan · 事后总结,并提出过程改进计划 30 40
合计 970 1190

三.代码设计与实现

1.解题思路

  • 先用正则表达式和字符串处理提取出名称,电话,和难度级别,得到地址.
  • 每次提取字符串的前两个字符,根据引入的pcas.json文件逐级匹配,得到前四级的地址.
  • 用正则表达式继续匹配得到后三级地址.
  • 若为第一级难度,将后三级地址合并,若为第三级难度,则调用高德api得到前四级地址,再回到步骤三.

2.代码结构


在main()函数里创建Address类实例,再调用show_info()打印出json数据.在parse()函数里通过调用get_XX()或call_api()完成对地址的解析,get_XX()里调用了cut_string()用来去掉字符串的某一级地址得到新字符串.

四.性能改进


可以看出parse()里的call_api()函数占用时间最多,改进方法就是尽量少调用api,采用更优秀的查表算法实现地址的补全功能,由于水平太菜未能实现.

五.单元测试

部分函数的覆盖率

样例测试

  • 输入
1!何东,北京东城13297814858区朝阳门街道南小街59号竹杆胡同小区.
2!柳吻,辽宁省大连市中山区青泥13013864707洼桥街道上海路45号宏孚大厦苏宁易购.
3!汝舟孙,贵州省修文县龙岗社区15766780930服务中心阳明西路196号龙岗居委会.
3!柏雅蚜,长宁区周家桥街道武夷路718号武夷13757741271花园722号楼.
  • 输出
{"姓名": "何东", "手机": "13297814858", "地址": ["北京", "北京市", "东城区", "朝阳门街道", "南小街59号竹杆胡同小区"]},
{"姓名": "柳吻", "手机": "13013864707", "地址": ["辽宁省", "大连市", "中山区", "青泥洼桥街道", "上海路", "45号", "宏孚大厦苏宁易购"]},
{"姓名": "汝舟孙", "手机": "15766780930", "地址": ["贵州省", "贵阳市", "修文县", "龙岗社区服务中心", "阳明西路", "196号", "龙岗居委会"]},
{"姓名": "柏雅蚜", "手机": "13757741271", "地址": ["上海", "上海市", "长宁区", "周家桥街道", "武夷路", "718号", "武夷花园722号楼"]}
, 

评测结果

六.异常处理

  • 输入手机号位数不是11位
  • 难度后没有感叹号
  • 名字后没有逗号
  • 没有连接网络或调用次数用尽

解决方法示例:

# 每个函数套上try except,例如:
try:
    call_api()
except:
    print("请连接网络再运行")
try:
    get_phoneNum()
except:
    print("手机号格式错误")
try:
    get_level()
except:
    print("难度等级格式错误")
try:
    get_name()
except:
    print("名字格式错误")

原文地址:https://www.cnblogs.com/lylinyi/p/11569413.html