• 第一次个人编程作业


    Github传送门

    PSP表格

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

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

    解题思路

    因为难度三的题对我来说有一定难度,而且时间上绝对来不及,因此只考虑前两级难度的题。思路就是取出来再从字符串里删掉。因为Python是现学的,所以写法也很菜,基本上就是用正则匹配,search,sub,append从头用到尾。依次取出难度,姓名,手机号,并把它们从字符串中去除,同时也除去“!”,“,”和结尾的“.”。然后一级行政区,二级行政区一级一级处理下来。行政区要先从网上了解具体的划分是怎样的,字数如何,有哪些特别情况,还要注意省、市、县字的缺失,以及市级、县级的整级缺失。对于缺失问题,从网上导入了市级和县级列表。根据匹配到的难度决定是否继续细分(难度一,难度二)。

    关键代码

    三级行政区处理如下,其他级别类似,视具体情况做改变。

    r = re.search("(.*?区)|(.*?县)|(.*?旗)|(.*?市)", s)
    if r == None:#县后缀缺失/整个级缺失
        a = 0
        for i in sanji:
            if s[0:2] in i:#县后缀缺失
                result.append(i + '县');s = re.sub(s[0:(len(i + '县')-1)],'',s,1)
                a = 1
                break
        if a == 0:
                result.append('')#整个级缺失
    else:#返回不为None,无缺失,找到了
    	result.append(r.group(0));s = re.sub(s[0:(len(r.group(0)))],'',s,1)#放入列表,用sub去除
    

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

    使用pycharm专业版的Profile Run进行性能分析,结果其实看不太懂,遍历二三级数据列表的时候浪费了很大一部分的时间。
    另外测了十个数据,覆盖率在60%上下浮动,挺低的……还有我应该把各级地址处理分别封装成一个个函数的




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

    输入输出

    天枢星评测系统评测得分

    输入:
    (括号内为覆盖率(%))

    1!卞继主,黑龙江省齐齐哈尔建华区卜奎街道鑫海15241257071家园B7号楼.(55)
    1!庾感裤,宁夏回族自治区13963011320中卫市沙坡头区砖塔村卫生室.(54)
    2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.(64)
    2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.(64)
    1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.(58)
    1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.(61)
    2!宦塌骨,北京市丰台区马家堡街道角门南路甲14号13865443474富卓苑小区.(53)
    1!家基,江苏省连云港市18828767011赣榆区海头镇赣柘线盐仓城村村委会.(56)
    1!钭隆箍,山西省阳泉市13100299356矿区赛鱼街道麻地巷32号楼.(56)
    2!后应楼,13060247654上海市宝山区大场镇上大路1329弄祁连3村.(53)
    

    输出:

    {'姓名': '卞继主', '手机': '15241257071', '地址': ['黑龙江省', '齐齐哈尔建华区', '', '卜奎街道', '鑫海家园B7号楼']}
    {'姓名': '庾感裤', '手机': '13963011320', '地址': ['宁夏回族自治区', '中卫市', '沙坡头区', '', '砖塔村卫生室54']}
    {'姓名': '王五', '手机': '18960221533', '地址': ['福建省', '福州市', '鼓楼区', '', '五一北路', '123号', '福州鼓楼医院']}
    {'姓名': '李四', '手机': '13756899511', '地址': ['福建省', '福州市', '鼓楼区', '鼓西街道', '湖滨路', '110号', '湖滨大厦一层']}
    {'姓名': '张三', '手机': '13599622362', '地址': ['福建省', '福州市', '闽侯县', '上街镇', '福州大学10#111']}
    {'姓名': '小陈', '手机': '13965231525', '地址': ['广东省', '东莞市', '', '凤岗镇', '凤平路13号']}
    {'姓名': '宦塌骨', '手机': '13865443474', '地址': ['北京', '北京市', '丰台区', '马家堡街道', '角门南路', '甲14号', '富卓苑小区']}
    {'姓名': '家基', '手机': '18828767011', '地址': ['江苏省', '连云港市', '赣榆区', '海头镇', '赣柘线盐仓城村村委会']}
    {'姓名': '钭隆箍', '手机': '13100299356', '地址': ['山西省', '阳泉市', '矿区', '赛鱼街道', '麻地巷32号楼']}
    {'姓名': '后应楼', '手机': '13060247654', '地址': ['上海', '市', '宝山区', '大场镇', '上大路', '', '1329弄祁连3村']}
    

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

    一开始代码是在EditPlus上面写的,因为Python也是现学的,缩进全用了tab,粘贴到编译器就傻眼了,研究了20分钟才发现要用空格。匹配到的难度是字符,不是数字。还有就是去除字符串中匹配的部分时,没有指明sub删除的次数,导致类似“福建福州……福州大学”这样的地址最后一级输出只有“大学”。其他异常暂时没发现。

    总结

    就是,我好菜啊……一开始写的C++,后来目睹了隔壁宿舍同学优雅地敲出简洁的Python代码,我就毅然地弃那写了两个小时的C++代码从了迷人的Python,自学了两个小时多就开始用我那可怜的知识量吭哧吭哧地写代码了。解题其实用到的就那么几个方法,写了好久总算是写完了,对Python有了一点初步的了解。这次作业使我的分析问题解决问题的能力有了进一步的提高。做这种作业的感觉还是不错的,虽然很烦,但让我体会到了更真切的学习计算机的感觉。

  • 相关阅读:
    指针数组和数组指针表示二维数组
    scanf与getchar()区别
    选择循环
    朴素的思想
    asp.net中word转html碰到的权限异常问题(转)
    MAC下安装Fiddler抓包工具
    抓包工具charles的使用
    mysql 命令大全
    利用反射拼接SQL查询条件字符串
    赚自己的淘宝佣金,让返利网无路可走
  • 原文地址:https://www.cnblogs.com/lsyqlelel/p/11608612.html
Copyright © 2020-2023  润新知