一.PSP表格
PSP2.1 | Personal Software Process Stages |
预估耗时(min) | 实际耗时(min) |
---|---|---|---|
Planning | 计划 | 60 | 30 |
Estimate | 估计这个任务需要多少时间 | 50 | 30 |
Development | 开发 | 240 | 300 |
Analysis | 需求分析 (包括学习新技术) |
120 | 180 |
Design Spec | 生成设计文档 | 60 | 30 |
Design Review | 设计复审 | 30 | 20 |
Coding Standard | 代码规范 (为开发制定合适的规范) |
30 | 20 |
Design | 具体设计 | 60 | 60 |
Coding | 具体编码 | 240 | 180 |
Code Review | 代码复审 | 180 | 120 |
Test | 测试 (自我测试,修改,提交修改) |
180 | 180 |
Reporting | 报告 | 60 | 60 |
Test Report | 测试报告 | 20 | 20 |
Size Measurement | 计算工作量 | 10 | 10 |
Postmortem & Process Improvement Plan |
事后总结 并提出过程改进计划 |
30 | 30 |
合计 | 1370 | 1270 |
二.计算模块接口的设计与实现过程
- 解题思路描述:
废话:
想给第一次编程作业添个备注,就叫只会用python打helloworld的我如何速成的故事。
看到题目时我先流下了不学无术的泪水,然后开始在连helloworld都不会打的java和忘光了的c艹里选,我果断挑了c艹,然后下载vs2017,开始百度“代码质量检测”,“单元测评”,“代码覆盖率”,“json”“性能分析”,每个都看得我一愣一愣的,后来得知python也在选择范围内时,还是选择了起码知道helloworld怎么打的python。
正文:
看到题目后,我第一时间只反应过来两点:
- 名字一定在最前面,并在“,”之前
- 手机号一定是11位
一开始傻傻的我脑子里想的是要一个个比过去,后来我在百度如何分离手机号的时候发现了正则表达式这个东西,还了解了一下什么是json等等,打开了新世界的大门。
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
另外实话说其实我还学了if,list,for之类的,真正的从头
- 设计实现过程
废话:
因为代码基础真的很差,我对类,函数基本上没有什么概念,上次打函数可能是一年前的事情了,不过我后来还是尝试的使用函数结果出了好多bug就不提了……
正文:
我的想法是:
-
判断是几级的难度(
其实附加没想过去做) -
用split()函数进行对姓名的分割,因为刚好在逗号前
-
用正则表达式匹配出手机号
-
根据难度判断是5级(省市区街道)还是7级(省市区街道路号码)来用正则表达式划分,存入一个list里(还要对直辖市进行判断!)
PATTERN = r'([u4e00-u9fa5]{2,5}?(?:省|自治区|市)){0,1}([u4e00-u9fa5]{2,7}?(?:区|县|州|市)){0,1}([u4e00-u9fa5]{2,7}?(?:区|县|州|市)){0,1}([u4e00-u9fa5]{2,7}?(?:村|镇|街道|乡)){0,1}'
-
把姓名,手机号,地址装在一个dict字典里,然后转换为json格式输出
dic['姓名']=line1[0] dic['手机']=tel[0] finaladd=[zxprovince,province,city,district,last1[0]] dic['地址']=finaladd json = json.dumps(dic,ensure_ascii=False,indent=4) print (json)
在我艰难的用了很久很久的时间学+打代码完成了上述之后,在2019年9月16日的晚上,截止前一天,我发现1,2级难度里,“省”,“市”两个字也可能缺失,我的心情是wtf~……
我卑微的理解能力让我以为只有3级难度才会出现缺失的部分。
收拾好心情的我马上想到暴力打表以前好像干过的方法,开始寻找中国省市区字典表的漫漫长路,后来我还是找到了,但是我发现我没办法在我已经写的挺完整的代码里插入这段再改,只能重新做,我尝试了一下但是最后还是放弃了(相信之后我会去做的。)
流程图如下:
![流程图](
)
三.计算模块接口部分的性能改进
![性能分析部分截图](
)
性能分析部分截图。
改进思路:使用函数进行切分姓名和手机号,而不是直接运行,都在主程序中会导致阅读困难,要学一下python中类和函数的使用。
四.单元测试
设计的部分样例:
1!小黄,新疆维吾尔自治区13107936778阿克苏地区新和县奇明路3号沙漠公园
3!小林,福建省福州市福清市玉屏13107936880街道江滨花园5号505
1!小黄,福建省莆田市城厢区凤凰山街道第13107938899十小区
2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
2!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
结果:
{"姓名": "小美", "手机": "15822153326", "地址": ["北京", "北京市", "东城区", "","交道口东大街", "1号", "北京市东城区人民法院"]}
{"姓名": "小黄", "手机": "13107936778", "地址": ["新疆维吾尔自治区", "阿克苏地区", "新和县", "", "奇明路3号沙漠公园"]}
{"姓名": "小郭", "手机":"17740409080", "地址": ["福建省", "厦门市", "翔安区", "新店镇", "厦门大学翔安校区33栋"]}
{"姓名": "小林", "手机": "13107936880", "地址": ["福建省", "福州市", "福清市", "玉屏街道", "", "", "江滨花园5号505"]}
{"姓名": "小黄", "手机": "13107938899", "地址":["福建省", "莆田市", "城厢区", "凤凰山街道", "第十小区"]}
{"姓名": "李四", "手机":"13756899511", "地址": ["福建省", "福州市", "鼓楼区", "鼓西街道", "湖滨路", "110号", "湖滨大厦一层"]}
{"姓名": "张三", "手机": "13599622362", "地址": ["", "福建福州", "闽侯县","上街镇", "", "", "福州大学10#111"]}
{"姓名": "王五", "手机": "18960221533", "地址": ["福建省", "福州市", "鼓楼区", "", "五一北路123号福州鼓楼医院"]}
{"姓名": "小美", "手机":"15822153326", "地址": ["北京", "北京市", "东城区", "", "交道口东大街", "1号","北京市东城区人民法院"]}
{"姓名": "小陈", "手机": "13965231525", "地址": ["广东省", "东莞市", "", "凤岗镇", "凤平路13号"]}
我没有完成3!的附加部分,所以有一些结果可能产生错误。
但在设计时为了找出会在哪里失败,还是设计了一些3!的题目来模拟真正的检测,发现果然不能补全上街道。为了提高代码覆盖率,考虑到各级的缺失来检测。
五.异常处理
- 输入时没有输入难度选择“1!”“2!”“3!”
- 输入时没有输入姓名
- 输入时手机号没有11位
例子:
小郭,福建省厦门17740409080市翔安区新店镇厦门大学翔安校区33栋
3!,福建省福州市福清市玉屏13107936880街道桥南路江滨花园5号505
1!小黄,福建省莆田市城厢区凤凰山街道第13107939十小区
六.总结部分
欢迎来到结尾的总结部分~
看到这里的你一定很累了,还要想着怎么给我写50字评论,辛苦啦比心( •̀ ω •́ )y!
这是我第一次写这么多的代码吧,这两年也不知道怎么混过来的2333,感觉在短短一周里逼迫自己提升了很多,虽然遇到了各种各样的困难,但我从不停的百度,查博客当中收获到了很多,也从同学们(重点表扬丁枢桐,小姚,展鸿,林睿睿)得到了很多的帮助!
快没有时间啦,再吐槽一下安装苦手的我,为了装质量检测工具,把我的vscode给搞崩了,有没有大佬能救我,在17号18点新下了一个pycharm,还是英文版的我都看不懂QAQ,勉强搞完了作业,突然想起来我亲爱的导师小傅也催我学python,路漫漫其修远兮,我一定努力QAAAAQ!