第一次个人编程作业

1.第一次个人编程作业GitHub地址

https://github.com/dyssl/031702424

2.PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3050
Estimate估计这个任务需要多少时间7575
Development开发60100
Analysis需求分析 (包括学习新技术)360250
Design Spec生成设计文档3015
Design Review设计复审3015
Coding Standard代码规范 (为目前的开发制定合适的规范)3010
Design具体设计6050
Coding具体编码270300
Code Review代码复审3030
Test测试(自我测试,修改代码,提交修改)12080
Reporting报告120100
Test Repor测试报告6090
Size Measurement计算工作量2015
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划6015
合计13551150

老实说,这张表格并不能完全反映我这次作业的实践分配情况。设计文档,代码规范,计算工作量,统统没有。我的时间主要花在拿到题目前发呆,学习自己不会的知识,代码实现,还有尝试使用评测系统(虽然花了很多时间在尝试使用评测系统但还是失败了)

3.解题思路

语言选择

拿到题目的时候我还蛮开心的,切分地址好像不是很难的事,柯老师没有骗我。可供选的的语言有c++,java还有python。我的好朋友陈金杰告诉我用c++是地狱难度,很难处理中文字符,所以我不要用c++做;我的好朋友余廷龙是用java做的,可是我连怎么用java打印helloword都不会,所以我也不要用java写;那我就只剩下python了,就决定是你了。

思考过程

首先题目有三个级别,我准备先从第一级入手,等我做出了第一级以后再继续深入下面的等级。但是现实比较残酷,在我写完第一级以后,本地运行的几个案例都ok,但是花了一个上午也没解决评测系统的问题,所以后面的两个级别和我也没什么缘分了,以下我只说明第一级的思路。

不知道你有没有听说过俄罗斯套娃,就是把最外面的娃娃摘掉,里面还有好多娃娃,一直摘很久才能摘完。前段时间看【轮到你了】,里面有提到这个套娃,看到这次的题目我就想到了套娃。我把整个字符串想象成一个套娃,一层一层的剥开套娃,依次得到名字,电话,省,市,区县,镇道,具体地址。用python来说就是,解析出一个信息后,将它切片,留下未被解析的部分,拆着拆着就结束了。听起来不难,让我们一起看看程序架构吧。

4.程序架构与函数实现

程序架构

未标题-1

先附上程序框架以及核心函数的接口,在我的函数实现中,解析字符串就像拆分俄罗斯套娃,每个函数负责拆分出一部分信息,以及把未被解析的部分留给下一个函数。举个例子,一开始的信息是最大的俄罗斯套娃,通过getname函数拆出名字的部分,把最大的俄罗斯套娃的「壳」给解析出来,次大的俄罗斯套娃里面装的就是未被解析的部分。当拆到第七层的时候,它几乎就已经是第五级地址了,getdetail函数做的不过是把字符串最后的「.」给去掉

函数实现

由于我对正则表达式没有非常熟悉,所以并没有用的很勤快,只有迫不得已的时候才会加以使用:

getname函数

基本思路是寻找「,」,姓名在「,」前,找到它也就完成了切分

getnumber函数

基本思路是用正则表达式匹配字符串

number = re.findall(r'\d{9,12}', message1)[0]

不是很确定手机号有多少号,但大概在这个区间吧

getshen函数

这里要先判断是否是直辖市,提前把直辖市导入到一个列表里,把字符串的前两个字符和列表做比对,如果是直辖市,那么返回字符串前两个字符作为省级名字,并且字符串不切分。

如果不是直辖市,就分别查找字符串里面有没有「省」,「自治区」,「行政区」。如果有其中一个就可以提前结束战斗,切分一下就结束了。但是考虑到字符串中可能省略掉「省」字这类情况,还需要和中国的所有省份信息作比较。提前导入一个中国省市信息的json文件,把字符串的前两个字做比对,找到后再进行切分

其他函数

其他函数就不一一做出说明,大体思路已经在前三个函数中展示,不过由于导入的json文件只有省和市的信息,在找第三级和第四级地址的时候,如果找不到关键字,就会默认没有这一级的信息哦

5.单元测试

1!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
1!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
1!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
1!刘湖,吉林省白山市六道江镇西村药店18694520738.
1!咸陡隐,江苏省苏州市吴江13184142847区平望镇新业织造有限公司吴江区平望镇双浜村村民委员会.
1!王五,云南省昭通市水富18694520738县云川路1号.
1!王五,云南省迪庆藏族自治州18694520738香格里拉市.
1!王五,四川省眉山市仁寿18694520738县黑龙滩镇牌坊街.
{"姓名": "李四", "手机": "13756899511", "地址": ["福建省", "福州市", "鼓楼区", "", "鼓西街道湖滨路110号湖滨大厦一层"]}
{"姓名": "张三", "手机": "13599622362", "地址": ["福建省", "福州市", "闽侯县", "上街镇", "福州大学10#111"]}
{"姓名": "王五", "手机": "18960221533", "地址": ["福建省", "福州市", "鼓楼区", "", "五一北路123号福州鼓楼医院"]}
{"姓名": "小美", "手机": "15822153326", "地址": ["北京", "北京市", "东城区", "", "交道口东大街1号北京市东城区人民法院"]}
{"姓名": "小陈", "手机": "13965231525", "地址": ["广东省", "东莞市", "", "凤岗镇", "凤平路13号"]}
{"姓名": "刘湖", "手机": "18694520738", "地址": ["吉林省", "白山市", "", "六道江镇", "西村药店"]}
{"姓名": "咸陡隐", "手机": "13184142847", "地址": ["江苏省", "苏州市", "吴江区", "平望镇", "新业织造有限公司吴江区平望镇双浜村村民委员会"]}
{"姓名": "王五", "手机": "18694520738", "地址": ["云南省", "昭通市", "水富县", "", "云川路1号"]}
{"姓名": "王五", "手机": "18694520738", "地址": ["云南省", "迪庆藏族自治州香格里拉市", "", "", ""]}
{"姓名": "王五", "手机": "18694520738", "地址": ["四川省", "眉山市", "仁寿县", "黑龙滩镇", "牌坊街"]}

6.异常处理

没有选择难度

王五,四川省眉山市仁寿18694520738县黑龙滩镇牌坊街.

没有电话号码

1!李四,福建省福州市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.

没有名字

1!广东省东莞市凤岗13965231525镇凤平路13号.

7.总结

我觉得这道题看似简单,暗处藏着许多陷阱,稍有不慎就会万劫不复,我踩到了很多陷阱,后面就没什么感觉了,干脆多踩。

反思了一下自己的这次作业,还是自己的硬实力差太多了,写一步卡一步,最后也没有跑过评测系统,有点受打击,也算是给自己一个教训,平时多读读书。

python的评测系统我到现在还是没用明白,上面虽然写的很明白,但是自己运行的时候会有各种各样的报错,简直举步维艰。

加油加油加油!

转载于:https://www.cnblogs.com/dyssl/p/11536036.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值