第一次个人编程作业

第一次个人编程作业!

1.GitHub链接

GitHub地址

2.PSP表格

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

3.计算模块接口的设计与实现过程

解题思路

在看到题目的时候,内心是想哭泣的,因为我知道以我目前的水平完全不可能解决。同时我还不会Python、Java,但听大家说Python会简单一些,所以一开始就决定用它。但是临时抱佛脚也是很难,就只能不断的百度,看其他人的博客,不断学习Python里的语法、函数等等,虽然还有很多没有搞懂。以下是我的主要解题思路:

  • 首先我将题目的输出格式确定,通过正则表达式提取输入的号码、人名并删去它们以及一些标点和等级,最后剩下单纯的地址字符串
  • 开始划分地址。根据每级地址的关键字通过正则表达式来划分,当不存在是,就设为空。识别每一级的地址,保存在输出的地址数组中后将它从输入的地址字符串删除。(第一级地址,我采用判断语句的暴力求解,因为实在想不到更好的方法了...)
  • 最后就是调用输出函数了

主要代码

sf= input('')
sf=sf[:-1]#删去末尾的'.'
pf={
    '姓名':'',
    '手机':'',
    '地址':[],
    }

#提取难度级别并删去
level=sf[0]
sf=sf.split(r'!')
sf=sf[1]

#提取号码并删去
telnum=re.findall("\d{11}",sf)
telnum=telnum[0]
sf=re.sub(r'\d{11}','',sf)

#提取人名并删去
name=re.sub(r',.*$',"",sf)
sf=re.sub(name,'',sf)
sf=re.sub(r',','',sf)#删去逗号

pf['姓名']=name
pf['手机']=telnum
#第二级地址
city={'市','地区','盟','自治州'}
for b in first:
    if b in direct_cities:
            second=b
            second+='市'
            break
for c in city:
    if c in sf:
            second=re.sub(c+'.*$',"",sf)
            second+=c
            sf=sf.replace(second,'',1)#删去第二级地址
            break
    else:
            second=''
pf['地址'].append(second)

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

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

只用了Visio C++中的性能分析,对计算机模块接口部分进行了分析(感觉不是很好)

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

输入

1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
1!王五,宁夏银川金凤18960221533区正源北街301号人民医院.
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
2!郑晓,北京市丁兰街道环丁路10号明珠15244068259.
2!张丽,吉林省白城市洮南市团结街道兴安南街5566号安泰社区公共事务13949401891服务中心.
2!李丽,13585841307浙江舟山市普陀区六横镇台兴路202号台门中学.
2!小球,浙江省温州市文成县南田镇朱宅路20号南田15217337889镇人民政府.
3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.

输出

{"姓名": "小陈", "手机": "13965231525", "地址": ["广东省", "东莞市", "", "凤岗镇", "凤平路13号"]}
{"姓名": "王五", "手机": "18960221533", "地址": ["宁夏回族自治区", "", "银川金凤区", "", "正源北街301号人民医院"]}
{"姓名": "张三", "手机": "13599622362", "地址": ["福建省", "", "福州闽侯县", "上街镇", "福州大学10#111"]}
{"姓名": "李四", "手机": "13756899511", "地址": ["福建省", "福州市", "鼓楼区", "鼓西街道", "湖滨路", "110号", "湖滨大厦一层"]}
{"姓名": "王五", "手机": "18960221533", "地址": ["福建省", "福州市", "鼓楼区", "", "五一北路", "123号", "福州鼓楼医院"]}
{"姓名": "郑晓", "手机": "15244068259", "地址": ["北京", "", "", "丁兰街道", "环丁路", "10号", "明珠"]}
{"姓名": "张丽", "手机": "13949401891", "地址": ["吉林省", "白城市", "洮南市团结街道兴安南街5566号安泰社区", "", "", "公共事务服务中心"]}
{"姓名": "李丽", "手机": "13585841307", "地址": ["浙江省", "舟山市", "普陀区", "六横镇", "台兴路", "202号", "台门中学"]}
{"姓名": "小球", "手机": "15217337889", "地址": ["浙江省", "温州市", "文成县", "南田镇", "朱宅路", "20号", "南田镇人民政府"]}
{"姓名": "小美", "手机": "15822153326", "地址": ["北京", "东城区交道口东大街1号北京市", "东城区", "", "", "人民法院"]}

覆盖率

用测评系统测出为64%
第一次个人编程作业_第2张图片

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

  • 如果出现直辖市,无法将其写成两级,如北京市--->北京北京市,输出会出现错乱(因为我第一级地址的划分是暴力手段,所以第二级地址就比较难处理,但是我觉得我应该可以的,不过时间有点不足,所以没再修正)
    例如:上面的“郑晓”的例子

  • 附加题,我有了解到可以用Python爬虫百度地图,通过API求解,不过这种方法可能会造成使地址太过详细化,多出不需要的信息,所以就没有补充了,而且对于爬虫我也不大懂...
  • 没有考虑到输入姓名或者电话号码为空的情况
  • 地址中出现以市等命名的地点时,会出错,如出现北京市人民政府
    例如:

    输入:
    3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.

    输出
    {"姓名": "小美", "手机": "15822153326", "地址": ["北京", "东城区交道口东大街1号北京市", "东城区", "", "", "人民法院"]}

    7.总结

    做完整个题目,感觉自己真的有点酷,虽然很多都是向别人寻求帮助或者百度一下你就知道,但是感觉自己好久没打这么多的代码了(因为我很菜),而且还是一门自己完全没有接触的语言。让我对于计算机又靠近了0.0000001mm呢!!!不过Python我还有很多没有搞清楚,比如正则表达式、爬虫,还有一些很基础的语法问题。
    一门语言真是博大精深(令人头秃....)啊!!!!!


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