第一次个人编程作业

github地址

个人仓库

psp表格

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

代码实现和思路

代码语言

因为听说c++写这次作业会挺难的,java还没学完,就临时学习了python打了这次作业。(学了一天的结果,代码巨丑,求轻喷)

代码思路

开始的思路是用正则切除电话号码与姓名,因为输入比较稳定,用逗号就能找到姓名,正则匹配11位数字就行了,这里就不多赘述了。切除后的字符串与电话姓名传回主函数进行地址切割。

用到的函数

主函数 函数 作用
get_Answer() 输入待处理字符串,输出答案
Cut_Name() 切除姓名
Cut_phone() 切除名字
find_Province() 遍历字典找出省
find_city() 便利字典找出市
solve_address() 后面全是处理子级地址的函数
这里放出最耗时的两个函数
    def find_Province(s:str):
        for sheng in table.keys():
            if s[:2] in sheng:
                return sheng
        return -1
      

这是遍历省的函数,因为有缺省关键字的情况,所以匹配前两个字符来找目标省。

    def find_city(s:str):
        for sheng in table.keys():
            if s[:2] in sheng:
                for cheng in table[sheng]:
                    if cheng[:2] in s:
                        return cheng
                return -1

这里也是同理,因为是字典,找到省就遍历其子级。

Tips

在做测试的时候,真是被整吐了,打了巨多的特判,这里就不放出来让大家嘲笑了,还有3级难度的太顶了,本肥仔做不了,投降(举白旗)。

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

用的是pycharm的profile,不说废话,上图。
因为代码测试工具精度不够,所以循环了1000次来测试
这是只测试一次的

这是1000次的

用时大多在输入,和遍历省,和遍历市的函数上。
输入本咸鱼不懂怎么改进。遍历是已经改过的,初版思路打了三张表,去网上复制粘贴。但发现比起字典实现,这会多出很多无用的遍历,浪费时间。

代码覆盖率

这东西说明没什么用,上图
avatar

单元测试

因为时间比较仓促,测试单个函数实在费时,容小弟摸鱼一会
只测试了一个主函数get_Answer()

测试样例

2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
1!钭隆箍,山西省阳泉市矿区赛鱼街道麻地巷32号13100299356楼.
2!姚帮,广东省汕头潮南区峡山街道峡山义英义华路136号莎丹13184626238服饰.
控制台的结果
{"姓名": "李四", "手机": "13756899511", "地址": ["福建省", "福州市", "鼓楼区", "鼓西街道", "湖滨路", "110号", "湖滨大厦一层"]}
{"姓名": "张三", "手机": "13599622362", "地址": ["福建省", "福州市", "闽侯县", "上街镇", "福州大学10#111"]}
{"姓名": "王五", "手机": "18960221533", "地址": ["福建省", "福州市", "鼓楼区", "", "五一北路", "123号", "福州鼓楼医院"]}
{"姓名": "钭隆箍", "手机": "13100299356", "地址": ["山西省", "阳泉市", "矿区", "赛鱼街道", "麻地巷32号楼"]}
{"姓名": "姚帮", "手机": "13184626238", "地址": ["广东省", "汕头市", "潮南区", "峡山街道", "峡山义英义华路", "136号", "莎丹服饰"]}

中间那个矿区有点难顶,不懂是不是真的有这个区还是说它只是一个名词。

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

我思考了许久(观摩其他人的异常处理)
分了两类。

一是没有选择难度

这东西我通过输入后特判实现的

二是缺少姓名或地址或电话号码

这东西我也是通过输入后特判实现的
(别骂了,别骂了,我只会特判)
最后贴上测评成绩

心路历程

1.边学着python边打,打完其实还没学完,哭了,要学的东西挺多。
2.了解了国家博大精深的地理知识,县级市和市级县傻傻分不清楚。
3.学会了各种测试代码的工具吧

posted @ 2019-09-27 17:44  无能狂怒熊猫人  阅读(209)  评论(2编辑  收藏  举报