第一次个人编程作业

一、仓库地址

二、psp表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 60
· Estimate · 估计这个任务需要多少时间 60 60
Development 开发 1000 1360
· Analysis · 需求分析 (包括学习新技术) 200 360
· Design Spec · 生成设计文档 120 100
· Design Review · 设计复审 60 80
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 20 10
· Design · 具体设计 120 150
· Coding 具体编码 240 300
· Code Review · 代码复审 100 120
· Test · 测试(自我测试,修改代码,提交修改) 100 240
Reporting 报告 150 180
· Test Repor · 测试报告 60 60
· Size Measurement · 计算工作量 30 40
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 60 80
· 合计 1210 1600

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


要实现这个代码,由三个部分:

1.从输入的字符串str中提取出姓名信息:

def getphone(str):
    phone = re.search('\d{11}', str)
    return phone.group()

2.从输入的字符串str中提取出手机号码信息:

def getname(str):
    name = re.search('[^,]+', str[2:])
    return name.group()

3从输入的字符串str中提取出地址信息并分级(由于源代码较长,仅展示部分代码。):

def getaddr(str):
    Match1 = re.search('[^,]+$', str)
    str_step1 = Match1.group()
    str_step2 = re.sub('\d{11}|', '', str_step1)
    Match2 = re.sub('\.', '', str_step2)
    if Match2[0:2]=='吉林':
        Match2=Match2[2:]
        if Match2[0]=='省':
            Match2=Match2[1:]
    str_step3 = cpca.transform([Match2], cut=False, open_warning=False)  # 调用cpca模块分出地址簿前三级
    list1 = str_step3.values.tolist()
    if (list1[0][0][0:2] == Match2[0:2]):
        list2 = list1[0]

    else:
        str_step3 = cpca.transform([Match2], open_warning=False)  # 调用cpca模块分出地址簿前三级
        list1 = str_step3.values.tolist()
        list2 = list1[0]

    str_step4 = list2[-1]
    str_step5 = re.search(re.compile(r'街道+|镇+|乡+|苏木+|开发区|合作区|管委会|园区'), str_step4)  # 分离出第四级
    if str_step5 == None:
        list4 = ['']
        list5 = [str_step4]
    else:
        x = str_step5.span()
        list4 = [str_step4[0:x[1]]]  # 把关键词之前的地址分成第四级给list4
        list5 = [str_step4[x[1]:]]
        if list4[0][-1]!='镇':
            if list5[0][0]=='道':
                list5=[str_step4]
                list4=['']
				……
	del list2[-1]
    list2 = list2 + list4
	list2 = list2 + list5
	return list2

到这边,地址的前五级算是分完了。在难度2的后续分级中,我同样采用匹配关键字分级。到最后,将三个得出的数据赋给一个字典,再按题目要求转为json格式输出:

dict = {'姓名': name, '手机': phone, '地址': addr}
json_dict = json.dumps(dict, ensure_ascii=False)
print(json_dict)

其实getaddr函数还能够细分,这个函数其实相当于一个大杂烩,将求得地址所需的步骤全都包含在了函数中。如果说改进的话,还可以将函数功能具体细分,而不是这样都放在一个函数里。

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

问题分析:
1.调用cpca会出现本来没有的地址被补全的情况
2.四个直辖市的输出不符合要求
改进代码:

	if list2[1][0:2] not in str_step2:
        list2[1]=''
    if list2[2][0:3] not in str_step2:
        list2[2] = ''
    if list2[0][0:2] == '上海':
        list2[0] = list2[0][0:2]
        list2[1]='上海市'
    if list2[0][0:2] == '天津':
        list2[0] = list2[0][0:2]
        list2[1] = '天津市'
    if list2[0][0:2] == '重庆':
        list2[0] = list2[0][0:2]
        list2[1] = '重庆市'
    if list2[0][0:2] == '北京' :
        list2[0] = list2[0][0:2]
        list2[1] = '北京市'

用多个if语句来修改地址列表
函数调用图

时间开销图

程序中耗时最多得是input。

五、单元测试

1!皇甫享,安徽宣城郎13734164891溪县飞鲤镇011乡道西三立村村委会.
1!家按犯,西藏自治区昌都卡若区城关镇214国道城关镇嘎东街社区居民委员15347650776会.
1!席赠,湖南省长沙市雨花区黎托街道黎托15224968346乡川河村雨花区托溪小学.
1!淳于象,辽宁丹东凤城市刘家河镇304国道徐家台村委13986910893会.
1!成偶,山西省吕梁岚18918500295县王狮乡209国道阳湾明德小学.
1!何东,北京东城13297814858区朝阳门街道南小街59号竹杆胡同小区.
1!满哪俊,福建福州仓山区临江街道工农路36号下池小区11号15384414182楼.
1!钱僻苍,安徽省合肥市瑶海区合肥龙岗综合经济开发区海洲景秀世家2期13001981786.
1!阳吟,上海市绿华18970386517镇华西村村委会.
1!施裕槐,上海普陀区大13743250056渡河路1927弄真北新村三街坊2号楼.

{"姓名": "皇甫享", "手机": "13734164891", "地址": ["安徽省", "宣城市", "郎溪县", "飞鲤镇", "011乡道西三立村村委会"]}
{"姓名": "家按犯", "手机": "15347650776", "地址": ["西藏自治区", "昌都市", "卡若区", "城关镇", "214国道城关镇嘎东街社区居民委员会"]},
{"姓名": "席赠", "手机": "15224968346", "地址": ["湖南省", "长沙市", "雨花区", "黎托街道", "黎托乡川河村雨花区托溪小学"]},
{"姓名": "淳于象", "手机": "13986910893", "地址": ["辽宁省", "丹东市", "凤城市", "刘家河镇", "304国道徐家台村委会"]},
{"姓名": "成偶", "手机": "18918500295", "地址": ["山西省", "吕梁市", "岚县", "王狮乡", "209国道阳湾明德小学"]}
{"姓名": "何东", "手机": "13297814858", "地址": ["北京", "北京市", "东城区", "朝阳门街道", "南小街59号竹杆胡同小区"]}
{"姓名": "满哪俊", "手机": "15384414182", "地址": ["福建省", "福州市", "仓山区", "临江街道", "工农路36号下池小区11号楼"]}
{"姓名": "钱僻苍", "手机": "13001981786", "地址": ["安徽省", "合肥市", "瑶海区", "合肥龙岗综合经济开发区", "海洲景秀世家2期"]}
{"姓名": "阳吟", "手机": "18970386517", "地址": ["上海", "上海市", "", "绿华镇", "华西村村委会"]}
{"姓名": "施裕槐", "手机": "13743250056", "地址": ["上海", "上海市", "普陀区", "", "大渡河路1927弄真北新村三街坊2号楼"]}

完整表格见顶部
时间花费见第四点。

七、总结

1.这个程序还是有很多无法解决的问题
2.我的思维还是局限在面向过程
3.我真的还只是一个小菜鸟,道阻且长啊。

posted @ 2019-09-28 23:26  安垵  阅读(192)  评论(2编辑  收藏  举报