第一次个人编程作业

一、github地址

二、PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划5080
Estimate· 估计这个任务需要多少时间5080
Development开发12501277
· Analysis 需求分析 (包括学习新技术)12090
Design Spec· 生成设计文档5050
Design Review设计复审3015
· Coding Standard 代码规范 (为目前的开发制定合适的规范)1012
· Design· 具体设计280360
· Coding· 具体编码600540
· Code Review代码复审10090
Test测试(自我测试,修改代码,提交修改)60120
Reporting报告75105
· Test Repor测试报告1530
Size Measurement计算工作量3045
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划3030
合计13751462

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

解题思路

1、本题主要考察了字符串的处理,我就想到python对字符串处理的功能还是比强大的虽然使用次数不多但我还是打算使用python。
2、本题主要是筛选出字符串中的各级的信息所以我觉得用正则表达式在本题很适用。
3、根据题意我先提取电话号码,然后判断该字符串的难度级别对字符串逐级提取。
4、对于三级难度补全前四级的地址我通过requests模块连接高德地图的API生成详细地址再进行正则抓取。

代码分析

1、这次代码主要使用的python中的re模块、requests模块和Json模块。
2、代码首先是提取电话号码采用正则表达中识别数字的公式进行提取,然后去除字符串中的特殊字符。
3、级别1、2按照省、市、县、镇、路、门牌号、其他详细地址进行提取。
4、对于级别3通过高德API得到地址的经纬度,再通过经纬度经过高德API得到详细地址,再与级别2的操作一致。
5、最后以Json格式输出。

主要函数

正则的搜索函数re.search()
网络抓取函数requests.get().text
Json格式转换函数json.dumps

正则表达式

p1=r'\d{11}' #判断手机号码
p2=r'^((河北|山西|辽宁|吉林|黑龙江|江苏|浙江|安徽|福建|江西|山东|河南|湖北|湖南|广东|海南|四川|贵州|云南|陕西|甘肃|青海|台湾)省?)|((内蒙古|广西(壮族)?|西藏|宁夏(回族)?|新疆(维吾尔)?)(自治区)?)|((北京|天津|上海|重庆))' # 判断省
p3=r'((石家庄|张家口|承德|唐山|秦皇岛|廊坊|保定|沧州|衡水|邢台|邯郸|太原|大同|朔州|忻州|阳泉|晋中|吕梁|长治|临汾|晋城|运城|呼和浩特|呼伦贝尔|通辽|赤峰|巴彦淖尔|乌兰察布|包头|鄂尔多斯|乌海|哈尔滨|黑河|伊春|齐齐哈尔|鹤岗|佳木斯|双鸭山|绥化|大庆|七台河|鸡西|牡丹江|长春|白城|松原|吉林|四平|辽源|白山|通化|沈阳|铁岭|阜新|抚顺|朝阳|本溪|辽阳|鞍山|盘锦|锦州|葫芦岛|营口|丹东|大连|南京|连云港|徐州|宿迁|淮安|盐城|泰州|扬州|镇江|南通|常州|无锡|苏州|杭州|湖州|嘉兴|绍兴|舟山|宁波|金华|衢州|台州|丽水|温州|合肥|淮北|亳州|宿州|蚌埠|阜阳|淮南|滁州|六安|马鞍山|芜湖|宣城|铜陵|池州|安庆|黄山|福州|宁德|南平|三明|莆田|龙岩|泉州|漳州|厦门|南昌|九江|景德镇|上饶|鹰潭|抚州|新余|宜春|萍乡|吉安|赣州|济南|德州|滨州|东营|烟台|威海|淄博|潍坊|聊城|泰安|莱芜|青岛|日照|济宁|菏泽|临沂|枣庄|郑州|安阳|鹤壁|濮阳|新乡|焦作|三门峡|开封|洛阳|商丘|许昌|平顶山|周口|漯河|南阳|驻马店|信阳|武汉|十堰|襄樊|随州|荆门|孝感|宜昌|黄冈|鄂州|荆州|黄石|咸宁|长沙|岳阳|张家界|常德|益阳|湘潭|株洲|娄底|怀化|邵阳|衡阳|永州|郴州|广州|韶关|梅州|河源|清远|潮州|揭阳|汕头|肇庆|惠州|佛山|东莞|云浮|汕尾|江门|中山|深圳|珠海|阳江|茂名|湛江|南宁|桂林|河池|贺州|柳州|百色|来宾|梧州|贵港|玉林|崇左|钦州|防城港|北海|海口|三亚|三沙|儋州|成都|广元|巴中|绵阳|德阳|达州|南充|遂宁|广安|资阳|眉山|雅安|内江|乐山|自贡|泸州|宜宾|攀枝花|贵阳|遵义|六盘水|安顺|铜仁|毕节|昆明|昭通|丽江|曲靖|保山|玉溪|临沧|普洱|拉萨|日喀则|昌都|林芝|山南|那曲|西安|榆林|延安|铜川|渭南|宝鸡|咸阳|商洛|汉中|安康|兰州|嘉峪关|酒泉|张掖|金昌|武威|白银|庆阳|平凉|定西|天水|陇南|西宁|海东|银川|石嘴山|吴忠|中卫|固原|乌鲁木齐|克拉玛依|吐鲁番|哈密)市?|上海市|重庆市|北京市|天津市|自治州)' #判断市
p4=r'(市|县|区)'  #判断县级
p5=r'(镇|街道|乡)' #判断乡级
p6=r'(路|街|巷|委会|道)' #判断道路
p7=r'((\d+)?-?(\d+)号)'#判断门牌号
p8=r'(,)'#提取,前的 名字
p9=r'(省)'
p10=r'(市)'
p11=r'(镇|街道|乡|\d+)'#对县级进行二级判断
p12=r'\d+'
p13=r'\d+.?\d+,\d+.?\d+'#抓取经纬度

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

代码性能分析图

1330190-20190927115037764-967266267.png
有点水

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

各级难度代码运行样例

1330190-20190928174009212-1081232432.png

1330190-20190928174022289-124174134.png

1330190-20190928174036429-1133094481.png

单元测试

1330190-20190928174239241-471909000.png

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

在这次编程作业中主要的异常有:
1、无法无法判断难度
2、无法抓取电话号码
3、通过高德API无法定位到经纬度
对于异常处理这一方面的东西还不太明白怎么弄所以代码中没有去实现

转载于:https://www.cnblogs.com/031702442cjj/p/11588370.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值