第一次个人编程作业

  • Github链接

    Github

  • PSP表格

    PSP2.1Personal Software Process Stages预估耗时(min)实际耗时(min)
    Planning计划6050
    Estimate估计这个任务需要多少时间6050
    Development开发730870
    Analysis需求分析(包括学习新技术)7080
    Design Spec生成设计文档5060
    Design Review设计复审6060
    Coding Standard代码规范(为开发制定合适的规范)3030
    Design具体设计8090
    Coding具体编码360300
    Code Review代码复审6050
    Test测试(自我测试,修改,提交修改)2020
    Reporting报告6060
    Test Report测试报告3020
    Size Measurement计算工作量1010
    Postmortem & Process Improvement Plan事后总结并提出过程改进计划3030
    total合计850980

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

解题步骤

  • 先提取出输入中的数字和!记录数字后并将其删除
  • 根据逗号提取出姓名
  • 代码中引用jieba(用python就是为了这个库,真的不会正则)提取出手机号
  • 由于能力不足,不能完成2!和3!的内容只能根据情况写出1!的代码
  • 根据文字匹配出省,市,县,镇级
  • 根据姓名,手机,地址存入字典中,将结果保存为json格式输出

代码实现过程

    if add_imfo[0] == '北京' or add_imfo[0] == '上海' or add_imfo[0] == '天津' or add_imfo[0] == '重庆':   #省市
        address.append(add_imfo[0])
        address.append(add_imfo[0] + '市')
        #print(add_imfo[0])
        add_imfo.remove(add_imfo[0])
    elif add_imfo[0] == '北京市' or add_imfo[0] == '上海市' or add_imfo[0] == '天津市' or add_imfo[0] == '重庆市':
        address.append(add_imfo[0][0:2])
        address.append(add_imfo[0])
        add_imfo.remove(add_imfo[0])
    else:
        address.append(add_imfo[0][0:2] + '省')
        add_imfo.remove(add_imfo[0])
        address.append(add_imfo[0][0:2] + '市')
        add_imfo.remove(add_imfo[0])
    l = len(add_imfo[0])
    if add_imfo[0][l-1:l] == '县' or add_imfo[0][l-1:l] == '区' or add_imfo[0][l-1:l] == '州':
        address.append(add_imfo[0])
        add_imfo.remove(add_imfo[0])
    else:
        address.append('')

···

    #分镇,街,道,乡///错误
    l = len (add_imfo[0])
    l1 = len(add_imfo[1])
    if add_imfo[1][l1-1:l1] == '镇' or add_imfo[1][l1-1:l1] == '道' or add_imfo[1][l1-1:l1] == '乡':
        address.append(add_imfo[0] + add_imfo[1])
        add_imfo.remove(add_imfo[0])
        add_imfo.remove(add_imfo[0])
    elif add_imfo[0][l-1:l] == '镇' or add_imfo[0][l-1:l] == '道' or add_imfo[0][l-1:l] == '乡':
        address.append(add_imfo[0])
        add_imfo.remove(add_imfo[0])
    else:
        address.append('')

    #增加最后地址
    Address = ''
    for item in add_imfo:
        Address += item
    address.append(Address)
    mydict["地址"] = address
    #1!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层print(mydict)
    pjson = json.dumps(mydict, ensure_ascii=False)
    print(pjson)
    #已经得出一个完整的列表

···

  • 这是部分代码展示,很简单很暴力的方法,但也算自己对这题的理解以及这几天的辛苦汗水以及掉落的头发的结晶吧。

  • 由于对C++不熟悉和根本不会JAVA,所以选择了用python来编写这个程序。不过由于python可使用的第三方库比较多,为我节省了挺多时间。以下流程图写出了我大概的思路
    1794521-20190922142422556-1017611087.png

部分代码内容解释

  • ret = re.match(r"1[35678]\d{9}", item) 唯一用到正则表达式去判断手机号(然鹅也是百度来的,为了图方便),之后就是比较常规的处理字符串,然后再合成列表,然后再合成字典的过程。其中较为特别的是用jieba库去分词后四个直辖市会完成的区分出来,所以在代码中我单独处理了这4个直辖市,能够较为准确的完成任务。

    不足之处

  • 由于不会正则表达式,也尝试去学了,目前还未掌握,自己还是会坚持学下去,从这题中我发现了其非常重要。然后在区分省份时没有考虑到自治区的情况,可能会有重大错误。最最最不好的是使用了jieba库吧,这非常投机取巧,而且还很容易分错,希望学了正则后能再尝试一下这题。

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

性能分析

由于不会使用所要求工具,只能按照自己理解来分析了,分析了也看不懂。也可能是错的分析。
1794521-20190917132522762-396225823.png

计算模块部分单元测试展示(只有一级难度)

  • 1!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层
{"姓名": "李四", "手机": "13756899511", "地址": ["福建省", "福州市", "鼓楼区", "鼓西街道", "湖滨路110号湖滨大厦一层"]}
  • 1!张三,福建福州闽13599622362侯县上街镇福州大学10#111
{"姓名": "张三", "手机": "13599622362", "地址": ["福建省", "福州市", "闽侯县", "上街镇", "福州大学10#111"]}
  • 1!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院
{"姓名": "王五", "手机": "18960221533", "地址": ["福建省", "福州市", "鼓楼区", "", "五一北路123号福州鼓楼医院"]}
  • 1!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院
{"姓名": "小美", "手机": "15822153326", "地址": ["北京", "北京市", "东城区", "", "交道口东大街1号北京市东城区人民法院"]}
  • 1!小陈,广东省东莞市凤岗13965231525镇凤平路13号
{"姓名": "小陈", "手机": "13965231525", "地址": ["广东省", "东莞市", "", "凤岗镇", "凤平路13号"]}

代码覆盖率

1794521-20190920123542187-167113376.png

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

  • 之前没有注意到这个,等到要写博客才发现,基本上也已经把BUG排除掉了,所以也没有图。
  • 文件的打开和读取一直通过不了,只能一遍一遍的百度寻求解决方法。
  • 没有考虑到各个自治区的区分,但是时间不够也没更改过来了。

实验总结

  • 第一次个人编程作业还是远远超出我的能力范围了,之前说的每天拿两个小时来学习软件工程,在做这个作业的时候已经严重透支。
  • 作为python只会一点点的人,用来做这道题,还是很有难度的。
  • 这大概是我今年第一次打python的代码,手很生,看来还是要熟能生巧。
  • 基本上不会用正则表达式,很依赖第三方库。
  • 对软件工程这门课以及我的发量表示担忧。

感谢您的查看与评分。

转载于:https://www.cnblogs.com/rxdd/p/11531641.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值