洗礼灵魂,修炼python(79)--全栈项目实战篇(7)—— 多级目录菜单之地址管理系统升级版
要求:
1.在上一篇的地址管理系统的基础上做升级改动
2.添加增删改的功能
3.尽量的贴近生活常识中的地址管理
分析:
需求不用多说了,干就完了
相关文件源码地址:github
这次由于要有增删改的操作,所以需要一个数据库文件存储数据,china_map.txt
1 | { '吉林' : { '长春' : { '朝阳区' : {}, '南关区' : {}, '宽城区' : {}, '二道区' : {}, '绿园区' : {}, '双阳区' : {}, '德惠市' : {}, '九台市' : {}, '榆树市' : {}, '农安县' : {}}, '吉林市' : { '船营区' : {}, '昌邑区' : {}, '龙潭区' : {}, '丰满区' : {}, '蛟河市' : {}, '桦甸市' : {}, '舒兰市' : {}, '磐石市' : {}, '永吉县' : {}}, '四平' : { '铁西区' : {}, '铁东区' : {}, '公主岭市' : {}, '双辽市' : {}, '梨树县' : {}, '伊通满族自治县' : {}}, '辽源' : { '龙山区' : {}, '西安区' : {}, '东丰县' : {}, '东辽县' : {}}, '通化' : { '东昌区' : {}, '二道江区' : {}, '梅河口市' : {}, '集安市' : {}, '通化县' : {}, '辉南县' : {}, '柳河县' : {}}, '白山' : { '浑江区' : {}, '江源区' : {}, '临江市' : {}, '抚松县' : {}, '靖宇县' : {}, '长白朝鲜族自治县' : {}}, '松原' : { '宁江区' : {}, '长岭县' : {}, '乾安县' : {}, '扶余县' : {}, '前郭尔罗斯蒙古族自治县' : {}}, '白城' : { '洮北区' : {}, '洮南市' : {}, '大安市' : {}, '镇赉县' : {}, '通榆县' : {}}, '延边州' : { '延吉市' : {}, '图们市' : {}, '敦化市' : {}, '和龙市' : {}, '珲春市' : {}, '龙井市' : {}, '汪清县' : {}, '安图县' : {}}, '长白山管委会' : {}}, '四川' : { '成都' : { '锦江区' : {}, '青羊区' : {}, '金牛区' : {}, '武侯区' : {}, '成华区' : {}, '青白江区' : {}, '龙泉驿区' : {}, '新都区' : {}, '温江区' : {}, '金堂县' : {}, '双流县' : {}, '郫县' : {}, '大邑县' : {}, '蒲江县' : {}, '新津县' : {}, '都江堰市' : {}, '彭州市' : {}, '崇州市' : {}, '邛崃市' : {}}, '自贡' : { '自流井区' : {}, '贡井区' : {}, '大安区' : {}, '滩区' : {}, '荣县' : {}, '富顺县' : {}}, '攀枝花' : { '东区' : {}, '西区' : {}, '仁和区' : {}, '米易县' : {}, '盐边县' : {}}, '泸州' : { '江阳区' : {}, '龙马潭区' : {}, '纳溪区' : {}, '泸县' : {}, '合江县' : {}, '叙永县' : {}, '古蔺县' : {}}, '德阳' : { '旌阳区' : {}, '广汉市' : {}, '什邡市' : {}, '绵竹市' : {}, '中江县' : {}, '罗江县' : {}}, '绵阳' : { '涪城区' : {}, '游仙区' : {}, '梓潼县' : {}, '三台县' : {}, '盐亭县' : {}, '安县' : {}, '平武县' : {}, '江油市' : {}, '北川羌族自治县' : {}}, '广元' : { '利州区' : {}, '昭化区' : {}, '朝天区' : {}, '旺苍县' : {}, '青川县' : {}, '剑阁县' : {}, '苍溪县' : {}}, '遂宁' : { '船山区' : {}, '安居区' : {}, '射洪县' : {}, '蓬溪县' : {}, '大英县' : {}}, '内江' : { '市中区' : {}, '东兴区' : {}, '资中县' : {}, '隆昌县' : {}, '威远县' : {}}, '乐山' : { '市中区' : {}, '沙湾区' : {}, '五通桥区' : {}, '金口河区' : {}, '犍为县' : {}, '井研县' : {}, '夹江县' : {}, '沐川县' : {}, '峨眉山市' : {}, '峨边彝族自治县' : {}, '马边彝族自治县' : {}}, '南充' : { '顺庆区' : {}, '高坪区' : {}, '嘉陵区' : {}, '西充县' : {}, '南部县' : {}, '蓬安县' : {}, '营山县' : {}, '仪陇县' : {}, '阆中市' : {}}, '眉山' : { '东坡区' : {}, '彭山区' : {}, '仁寿县' : {}, '丹棱县' : {}, '青神县' : {}, '洪雅县' : {}}, '宜宾' : { '翠屏区' : {}, '南溪区' : {}, '宜宾县' : {}, '江安县' : {}, '长宁县' : {}, '高县' : {}, '筠连县' : {}, '珙县' : {}, '兴文县' : {}, '屏山县' : {}}, '广安' : { '广安区' : {}, '前锋区' : {}, '邻水县' : {}, '武胜县' : {}, '岳池县' : {}, '华蓥市' : {}}, '达州' : { '通川区' : {}, '达川区' : {}, '宣汉县' : {}, '开江县' : {}, '大竹县' : {}, '渠县' : {}, '万源市' : {}}, '雅安' : { '雨城区' : {}, '名山区' : {}, '荥经县' : {}, '汉源县' : {}, '石棉县' : {}, '天全县' : {}, '芦山县' : {}, '宝兴县' : {}}, '巴中' : { '巴州区' : {}, '恩阳区' : {}, '平昌县' : {}, '通江县' : {}, '南江县' : {}}, '资阳' : { '雁江区' : {}, '安岳县' : {}, '乐至县' : {}, '简阳市' : {}}, '阿坝藏族羌族自治州' : { '马尔康县' : {}, '金川县' : {}, '小金县' : {}, '阿坝县' : {}, '若尔盖县' : {}, '红原县' : {}, '壤塘县' : {}, '汶川县' : {}, '理县' : {}, '茂县' : {}, '松潘县' : {}, '九寨沟县' : {}, '黑水县' : {}}, '甘孜藏族自治州' : { '康定县' : {}, '泸定县' : {}, '九龙县' : {}, '道孚县' : {}, '炉霍县' : {}, '甘孜县' : {}, '新龙县' : {}, '德格县' : {}, '白玉县' : {}, '石渠县' : {}, '色达县' : {}, '理塘县' : {}, '巴塘县' : {}, '乡城县' : {}, '稻城县' : {}, '得荣县' : {}}, '凉山彝族自治州' : { '西昌市' : {}, '德昌县' : {}, '会理县' : {}, '会东县' : {}, '宁南县' : {}, '普格县' : {}, '布拖县' : {}, '昭觉县' : {}, '金阳县' : {}, '雷波县' : {}, '美姑县' : {}, '甘洛县' : {}, '越西县' : {}, '喜德县' : {}, '冕宁县' : {}, '盐源县' : {}, '木里藏族自治县' : {}}}, '北京' : {' ': {}, ' 朝阳区 ': {' ': {}}}} |
然后就是主程序文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #!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() |
结果测试:
(图片只截取了部分,很简单,不全部展示了)
总结优化:
是的,我的每个项目都有总结优化,因为我觉得从来没有一个完美的程序,它总有可优化的地方,但是目前我们暂时不做得那么高大上,能拿到直接投入使用的那种,不是不可行,是因为目前是项目篇,所以尽量的从简单的入手,后期自然慢慢越来越完善,到时候你再回过头来,想怎么优化都可以
可优化的地方就不用多说了,和前面的一样的
分类:
洗礼灵魂,修炼python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】