• 第一次个人编程作业


    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真的是一个小语种,就算学了它说出去也没人知道是什么
    • 太久没有进行编程题的考验,脑子已经僵化了什么都不会
    • 为接下来的结对编程感到无比的担忧
  • 相关阅读:
    ORA-30567: name already used by an existing
    vue router 需要go(-2)才能返回前一页
    MVC理解
    细说业务逻辑(后篇)
    细说业务逻辑(前篇)
    Python学习笔记-风变编程
    Python3 基础语法最常⻅报错类型&示意
    删除我的电脑/此电脑里的多余图标(坚果云、百度网盘、腾讯XX、WPS)
    vue 父组件传递方法 :和@的区别
    最全 Neo4j 可视化图形数据库的工具!
  • 原文地址:https://www.cnblogs.com/lxx1999/p/11517283.html
Copyright © 2020-2023  润新知