第一次个人编程作业

031702433仓库

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

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning· 计划3020
Estimate· 估计这个任务需要多少时间16801225
Development· 开发15801020
Analysis· 需求分析 (包括学习新技术)300200
Design Spec· 生成设计文档6050
Design Review· 设计复审6050
Coding Standard· 代码规范 (为目前的开发制定合适的规范)6020
Design· 具体设计200100
Coding· 具体编码500300
Code Review· 代码复审200100
Test· 测试(自我测试,修改代码,提交修改)200200
Reporting· 报告100205
Test Repor· 测试报告3060
Size Measurement· 计算工作量1025
Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划60120
=· 合计18101450

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

主要函数

函数名功能
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)

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

1272048-20190917132722011-98502840.png
1272048-20190917132723548-1087911553.png
1272048-20190917132724307-720715797.png

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

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

测试数据

1272048-20190917181107680-286158219.png

输入

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

输出

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

测试覆盖率

1272048-20190917175956101-452931405.png
1272048-20190917181648546-1643841163.png

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

未解决错误案例

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

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

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

转载于:https://www.cnblogs.com/lxx1999/p/11517283.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值