一、github地址
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 50 | 80 |
Estimate | · 估计这个任务需要多少时间 | 50 | 80 |
Development | 开发 | 1250 | 1277 |
· Analysis | 需求分析 (包括学习新技术) | 120 | 90 |
Design Spec | · 生成设计文档 | 50 | 50 |
Design Review | 设计复审 | 30 | 15 |
· Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 12 |
· Design | · 具体设计 | 280 | 360 |
· Coding | · 具体编码 | 600 | 540 |
· Code Review | 代码复审 | 100 | 90 |
Test | 测试(自我测试,修改代码,提交修改) | 60 | 120 |
Reporting | 报告 | 75 | 105 |
· Test Repor | 测试报告 | 15 | 30 |
Size Measurement | 计算工作量 | 30 | 45 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 1375 | 1462 |
三、计算模块接口的设计与实现过程
解题思路
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+'#抓取经纬度
计算模块接口部分的性能改进
代码性能分析图
有点水
计算模块部分单元测试展示
各级难度代码运行样例
单元测试
计算模块部分异常处理说明
在这次编程作业中主要的异常有:
1、无法无法判断难度
2、无法抓取电话号码
3、通过高德API无法定位到经纬度对于异常处理这一方面的东西还不太明白怎么弄所以代码中没有去实现