洗礼灵魂,修炼python(79)--全栈项目实战篇(7)—— 多级目录菜单之地址管理系统升级版
要求:
1.在上一篇的地址管理系统的基础上做升级改动
2.添加增删改的功能
3.尽量的贴近生活常识中的地址管理
分析:
需求不用多说了,干就完了
相关文件源码地址:github
这次由于要有增删改的操作,所以需要一个数据库文件存储数据,china_map.txt
{'吉林': {'长春': {'朝阳区': {}, '南关区': {}, '宽城区': {}, '二道区': {}, '绿园区': {}, '双阳区': {}, '德惠市': {}, '九台市': {}, '榆树市': {}, '农安县': {}}, '吉林市': {'船营区': {}, '昌邑区': {}, '龙潭区': {}, '丰满区': {}, '蛟河市': {}, '桦甸市': {}, '舒兰市': {}, '磐石市': {}, '永吉县': {}}, '四平': {'铁西区': {}, '铁东区': {}, '公主岭市': {}, '双辽市': {}, '梨树县': {}, '伊通满族自治县': {}}, '辽源': {'龙山区': {}, '西安区': {}, '东丰县': {}, '东辽县': {}}, '通化': {'东昌区': {}, '二道江区': {}, '梅河口市': {}, '集安市': {}, '通化县': {}, '辉南县': {}, '柳河县': {}}, '白山': {'浑江区': {}, '江源区': {}, '临江市': {}, '抚松县': {}, '靖宇县': {}, '长白朝鲜族自治县': {}}, '松原': {'宁江区': {}, '长岭县': {}, '乾安县': {}, '扶余县': {}, '前郭尔罗斯蒙古族自治县': {}}, '白城': {'洮北区': {}, '洮南市': {}, '大安市': {}, '镇赉县': {}, '通榆县': {}}, '延边州': {'延吉市': {}, '图们市': {}, '敦化市': {}, '和龙市': {}, '珲春市': {}, '龙井市': {}, '汪清县': {}, '安图县': {}}, '长白山管委会': {}}, '四川': {'成都': {'锦江区': {}, '青羊区': {}, '金牛区': {}, '武侯区': {}, '成华区': {}, '青白江区': {}, '龙泉驿区': {}, '新都区': {}, '温江区': {}, '金堂县': {}, '双流县': {}, '郫县': {}, '大邑县': {}, '蒲江县': {}, '新津县': {}, '都江堰市': {}, '彭州市': {}, '崇州市': {}, '邛崃市': {}}, '自贡': {'自流井区': {}, '贡井区': {}, '大安区': {}, '滩区': {}, '荣县': {}, '富顺县': {}}, '攀枝花': {'东区': {}, '西区': {}, '仁和区': {}, '米易县': {}, '盐边县': {}}, '泸州': {'江阳区': {}, '龙马潭区': {}, '纳溪区': {}, '泸县': {}, '合江县': {}, '叙永县': {}, '古蔺县': {}}, '德阳': {'旌阳区': {}, '广汉市': {}, '什邡市': {}, '绵竹市': {}, '中江县': {}, '罗江县': {}}, '绵阳': {'涪城区': {}, '游仙区': {}, '梓潼县': {}, '三台县': {}, '盐亭县': {}, '安县': {}, '平武县': {}, '江油市': {}, '北川羌族自治县': {}}, '广元': {'利州区': {}, '昭化区': {}, '朝天区': {}, '旺苍县': {}, '青川县': {}, '剑阁县': {}, '苍溪县': {}}, '遂宁': {'船山区': {}, '安居区': {}, '射洪县': {}, '蓬溪县': {}, '大英县': {}}, '内江': {'市中区': {}, '东兴区': {}, '资中县': {}, '隆昌县': {}, '威远县': {}}, '乐山': {'市中区': {}, '沙湾区': {}, '五通桥区': {}, '金口河区': {}, '犍为县': {}, '井研县': {}, '夹江县': {}, '沐川县': {}, '峨眉山市': {}, '峨边彝族自治县': {}, '马边彝族自治县': {}}, '南充': {'顺庆区': {}, '高坪区': {}, '嘉陵区': {}, '西充县': {}, '南部县': {}, '蓬安县': {}, '营山县': {}, '仪陇县': {}, '阆中市': {}}, '眉山': {'东坡区': {}, '彭山区': {}, '仁寿县': {}, '丹棱县': {}, '青神县': {}, '洪雅县': {}}, '宜宾': {'翠屏区': {}, '南溪区': {}, '宜宾县': {}, '江安县': {}, '长宁县': {}, '高县': {}, '筠连县': {}, '珙县': {}, '兴文县': {}, '屏山县': {}}, '广安': {'广安区': {}, '前锋区': {}, '邻水县': {}, '武胜县': {}, '岳池县': {}, '华蓥市': {}}, '达州': {'通川区': {}, '达川区': {}, '宣汉县': {}, '开江县': {}, '大竹县': {}, '渠县': {}, '万源市': {}}, '雅安': {'雨城区': {}, '名山区': {}, '荥经县': {}, '汉源县': {}, '石棉县': {}, '天全县': {}, '芦山县': {}, '宝兴县': {}}, '巴中': {'巴州区': {}, '恩阳区': {}, '平昌县': {}, '通江县': {}, '南江县': {}}, '资阳': {'雁江区': {}, '安岳县': {}, '乐至县': {}, '简阳市': {}}, '阿坝藏族羌族自治州': {'马尔康县': {}, '金川县': {}, '小金县': {}, '阿坝县': {}, '若尔盖县': {}, '红原县': {}, '壤塘县': {}, '汶川县': {}, '理县': {}, '茂县': {}, '松潘县': {}, '九寨沟县': {}, '黑水县': {}}, '甘孜藏族自治州': {'康定县': {}, '泸定县': {}, '九龙县': {}, '道孚县': {}, '炉霍县': {}, '甘孜县': {}, '新龙县': {}, '德格县': {}, '白玉县': {}, '石渠县': {}, '色达县': {}, '理塘县': {}, '巴塘县': {}, '乡城县': {}, '稻城县': {}, '得荣县': {}}, '凉山彝族自治州': {'西昌市': {}, '德昌县': {}, '会理县': {}, '会东县': {}, '宁南县': {}, '普格县': {}, '布拖县': {}, '昭觉县': {}, '金阳县': {}, '雷波县': {}, '美姑县': {}, '甘洛县': {}, '越西县': {}, '喜德县': {}, '冕宁县': {}, '盐源县': {}, '木里藏族自治县': {}}}, '北京': {'': {}, '朝阳区': {'': {}}}}
然后就是主程序文件
#!usr/bin/env python
#-*- coding:utf-8 -*-
# author:yangva
# datetime:2017/12/9 0009 13:16
f=open('chinamap.txt','r')
china_map_dict = eval(f.read())
f.close()
current_leval = china_map_dict #实现动态循环
parent_list = [] #把所有列表父级放进列表
while True:
for key in current_leval:
print(key)
choice = input('>>>:').strip()
if len(choice) == 0:continue
if choice in current_leval:
temp = input('发现以上数据【%s】有错?你想修改或者删除【%s】吗?【yes/no】>>>:'%(choice,choice))
while True:
if temp == 'yes':
temp = input('您是修改还是删除?【revise/delete】>>>:')
if temp == 'revise':
value = input('请输入您的正确值:')
current_leval[value] = current_leval.pop(choice)
print('已修改')
break
elif temp == 'delete':
current_leval.pop(choice)
print('已删除',end='') #为了和后面的异常放在一行组合为一句
break
else:
print('输入有误!已自动进入下一级,需要修改请回退到上一级')
break
elif temp == 'no':break
else:
print('输入有误!已自动进入下一级,需要修改请回退到上一级')
break
try:
parent_list.append(current_leval)
current_leval = current_leval[choice] #进入子级
except KeyError as reson:
print(reson)
elif choice == 'back':
if parent_list:
current_leval=parent_list.pop() #取出父级(上一级)
elif choice == 'quit':
print('程序已退出')
break
else:
while True:
temp = input('无选项【%s】,你想添加此项吗?【yes/no】>>>:'%choice)
if temp == 'yes':
value = input('请输入您为【%s】添加的数据(可以为空)>>>:'%choice).strip()
current_leval[choice] = {value:{}}
break
elif temp == 'no':break
else:
print('输入有误!!')
break
f=open('chinamap.txt','w')
f.write(str(china_map_dict))
f.close()
结果测试:
(图片只截取了部分,很简单,不全部展示了)
总结优化:
是的,我的每个项目都有总结优化,因为我觉得从来没有一个完美的程序,它总有可优化的地方,但是目前我们暂时不做得那么高大上,能拿到直接投入使用的那种,不是不可行,是因为目前是项目篇,所以尽量的从简单的入手,后期自然慢慢越来越完善,到时候你再回过头来,想怎么优化都可以
可优化的地方就不用多说了,和前面的一样的