第一次个人编程作业

031702433仓库

【ps:如果评测同学在评测我的代码时报错,请在cmd上pip install cpca,和pip install jieba,感恩】

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

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

主要函数

函数名 功能
def sort_name(infomation) 提取名字
def sort_phone(firstcut) 提取出电话
def sortinfo(secondcut) 切分详细地址
cpca.transform(address) 切分省市区

解题思路

  • 使用python来解题,从入门到入坟
  • 获取省市区地址数据,中国三级行政区划分爬取自(中华人民共和国民政局全国行政区划查询平台
  • 数据文件在为cpca/resources/pca.csv,数据为2019年2月20日在官网上爬取的最新权威数据
  • 代码中最主要的方法是cpca.transform,该方法可以输入任意的可迭代类型(如list,pandas的Series类型等),然后将其转换为一个DataFrame,可以用list将其保存
    真的动手造轮子太难了,只会使用写好的第三方库

方法sortname:很简单的利用python自带的re模块切分数据,都怪数据太整齐,直接逗号隔开

origin_list = information.split(',', 1)

方法sortphone:先在数据中找到长度11位的纯数字,将其提取出来后判断是否是手机号

phone = re.compile('^0\d{2,3}\d{7,8}$|^1[358]\d{9}$|^147\d{8}')
phonematch = phone.match(first_value)
if phonematch:
     phonenum = phonematch.group()

方法transform:处理了省的简写情况,普通省份和直辖市的分类,自治区和特别行政区的情况

_fill_province_area_map
_fill_area_map
_fill_city_map

方法sortinfo:切分地址并填充省市信息,保存姓名手机数据转为字典返回

temp = {
    "姓名": name,
    "手机": phone,
    "地址": address
}
return json.dumps(temp, ensure_ascii=False,  indent=4)

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



  • 其实性能分析图太长了,没有全部截出来。大多数时间是花在了读取省市区的数据和匹配地址上,所以改进的方法就是更改匹配算法,需要强大的算法编程能力才能进行优化

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

测试数据

输入

刘一,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层
刘二,福建省福州鼓楼13101111111区西洪路588号金牛山
刘三,北京13101111112市海淀区清华西路28号圆明园
刘四,上海市嘉定区南翔13101111113镇沪宜公路218号古猗园
刘五,杭州市西湖区龙井13101111114路1号西湖风景区
刘六,福州市闽侯县南屿镇五峰里1号福州旗山森林国家旅游区

输出

[{'姓名': '刘一', '手机': '13756899511', '地址': ['福建省', '福州市', '鼓楼区', '鼓西街道', '湖滨路110号湖滨大厦一层']}]
[{'姓名': '刘二', '手机': '13101111111', '地址': ['福建省', '福州市', '鼓楼区', '', '西洪路588号金牛山']}]
[{'姓名': '刘三', '手机': '13101111112', '地址': ['北京市', '北京市', '海淀区', '', '清华西路28号圆明园']}]
[{'姓名': '刘四', '手机': '13101111113', '地址': ['上海市', '上海市', '嘉定区', '南翔镇', '沪宜公路218号古猗园']}]
[{'姓名': '刘五', '手机': '13101111114', '地址': ['浙江省', '杭州市', '西湖区', '', '龙井路1号西湖风景区']}]

测试覆盖率


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

未解决错误案例

王一,上海市浦东新区锦13101111111绣路1001号世纪公园
[{'姓名': '王一', '手机': '13101111111', '地址': ['', '', '', '', '上海市浦东新区锦绣路1001号世纪公园']}]
  • 错误:个别省市区地址分割错误.
  • 分析:地址库中存储地址错误.

刘六,福州市南屿镇五峰里1号福州旗山森林国家旅游区
[{'姓名': '刘六', '地址': ['福建省', '福州市', '', '南屿镇', '五峰里1号福州旗山森林国家旅游区']}]
  • 错误:地址的区没有进行匹配填充.
  • 分析:数据匹配遗漏.

自我总结

  • 一天速成python,在初始语法的情况下面向百度编程 ,Ctrl+c、Ctrl+v用的无比熟练
  • 我太难了,只会调用第三方库来,自己不会造轮子,可惜过不了评测,这次的分数要没了
  • 在大概读懂题目的情况下,使用网络上的省市区映射模块加自己的暴力解法
  • 再一次思考Objective-C真的是一个小语种,就算学了它说出去也没人知道是什么
  • 太久没有进行编程题的考验,脑子已经僵化了什么都不会
  • 为接下来的结对编程感到无比的担忧
原文地址:https://www.cnblogs.com/lxx1999/p/11517283.html