第一次编程作业

我的GitHub

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

解题步骤

  • 先用正则表达式将姓名和号码提取出来。
  • 打一个省市表
  • 提取省市
  • 提取剩下的地址
  • 结果保存为json

设计实现过程

看到Java直接排除,因为没学过,而c++也是个半吊子,所以用python来编写这个程序,因为有学过python,实在是对我太友好了。
一开始想直接整个使用正则表达式,然后发现地址的标识会缺失,如果只用正则直接去世,所以我想到打表。
这个代码首先分别打一个省份和市的列表,先分别调用函数实现等级,姓名和电话的分离,剩下的函数主要是切出剩下的地址字段然后删除,最后留下的即为切到只剩下最后一级的地址。
最后各个函数和流程具体如下:

函数名 说明
def createsheng 省份打表
def createshi 市打表
def cutname 切去名字电话
def cutsheng 切去省
def cutshi 切去市
def cutall 切去剩下的所有地址
![image.png](https://upload-images.jianshu.io/upload_images/19518479-4611ce519f67d61f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

返回示例

![image.png](https://upload-images.jianshu.io/upload_images/19518479-2288155ae68d2651.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

image.png
image.png

  • 可见我总共用时15秒,builtins.exec花了我大部分的时间,说明我字符串表达式的返回太多次,降低字符串返回即可提高性能。

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

  • 打表的函数我就没有做单元测试了
    def test_cutname(str):
        a=cutname(str)
        b=re.findall(r'\d!(.*)(\,).*(\d{11}).*',str)
        self.assertEquals(a, b[0])

    def test_findsheng(str):
        a=findsheng(str)
        b=re.findall(r'(.*)省?.*',str)
        self.assertEquals(a, b[0])

    def test_findshi(str):
        a=findsheng(str)
        b=re.findall(r'(.*)市?.)',str)
        self.assertEquals(a, b[0])

计算模块部分异常处理说明

  • 只有电话,没有地址
    try:
    words=string[0:2]#切片
    except Error:
    print('没有输入地址')

  • 注意贪婪匹配!
    这个特别重要,有时候忘了写找了很久才知道错在哪里。

posted @ 2019-09-17 22:18  左登峰  阅读(169)  评论(3编辑  收藏  举报