洗礼灵魂,修炼python(78)--全栈项目实战篇(6)—— 多级目录菜单之地址管理系统
相信各位都在在网上买过东西吧?那么今天我的主题就是写个在线购物系统,是不可能的,哈哈(后期确实有这个项目),那么购物都填写过快递地址吧?然后网上查个地址都有地址管理吧?
要求:
1.打印出省、市、县等多级目录
2.每一级可以返回到上一级,第一级不能再往上返回
3.可以随时退出系统
分析:
1.简单的地址管理,那么不必把全国的地区都写清楚,做个简单的范例就行,根据你常识中的地址来写就行
2.既然是层层跌进的,那么就有包含关系,这种包含关系怎么搞呢?换句话用什么数据类型存储,我个人喜欢用字典,你们可以随意
3.可以随时退出系统,小问题,不用多说了
还是那句话,我希望你已经思考过在看的下面
同样的,代码发布区在github,传送门
一共就一个主程序文件,这里我暂且只用了两个省份作为范例,设定的三级目录,当然你可以再设定详细的目录。代码:
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 64 | #!usr/bin/env python #-*- coding:utf-8 -*- # author:yangva # datetime:2017/12/17 0007 18:16 china_map_dict = { '吉林' :{ '长春' :{ '朝阳区' :{}, '南关区' :{}, '宽城区' :{}, '二道区' :{}, '绿园区' :{}, '双阳区' :{}, '德惠市' :{}, '九台市' :{}, '榆树市' :{}, '农安县' :{}}, '吉林市' :{ '船营区' :{}, '昌邑区' :{}, '龙潭区' :{}, '丰满区' :{}, '蛟河市' :{}, '桦甸市' :{}, '舒兰市' :{}, '磐石市' :{}, '永吉县' :{}}, '四平' :{ '铁西区' :{}, '铁东区' :{}, '公主岭市' :{}, '双辽市' :{}, '梨树县' :{}, '伊通满族自治县' :{}}, '辽源' :{ '龙山区' :{}, '西安区' :{}, '东丰县' :{}, '东辽县' :{}}, '通化' :{ '东昌区' :{}, '二道江区' :{}, '梅河口市' :{}, '集安市' :{}, '通化县' :{}, '辉南县' :{}, '柳河县' :{}}, '白山' :{ '浑江区' :{}, '江源区' :{}, '临江市' :{}, '抚松县' :{}, '靖宇县' :{}, '长白朝鲜族自治县' :{}}, '松原' :{ '宁江区' :{}, '长岭县' :{}, '乾安县' :{}, '扶余县' :{}, '前郭尔罗斯蒙古族自治县' :{}}, '白城' :{ '洮北区' :{}, '洮南市' :{}, '大安市' :{}, '镇赉县' :{}, '通榆县' :{}}, '延边州' :{ '延吉市' :{}, '图们市' :{}, '敦化市' :{}, '和龙市' :{}, '珲春市' :{}, '龙井市' :{}, '汪清县' :{}, '安图县' :{}}, '长白山管委会' :{} }, '四川' :{ '成都' :{ '锦江区' :{}, '青羊区' :{}, '金牛区' :{}, '武侯区' :{}, '成华区' :{}, '青白江区' :{}, '龙泉驿区' :{}, '新都区' :{}, '温江区' :{}, '金堂县' :{}, '双流县' :{}, '郫县' :{}, '大邑县' :{}, '蒲江县' :{}, '新津县' :{}, '都江堰市' :{}, '彭州市' :{}, '崇州市' :{}, '邛崃市' :{}}, '自贡' :{ '自流井区' :{}, '贡井区' :{}, '大安区' :{}, '滩区' :{}, '荣县' :{}, '富顺县' :{}}, '攀枝花' :{ '东区' :{}, '西区' :{}, '仁和区' :{}, '米易县' :{}, '盐边县' :{}}, '泸州' :{ '江阳区' :{}, '龙马潭区' :{}, '纳溪区' :{}, '泸县' :{}, '合江县' :{}, '叙永县' :{}, '古蔺县' :{}}, '德阳' :{ '旌阳区' :{}, '广汉市' :{}, '什邡市' :{}, '绵竹市' :{}, '中江县' :{}, '罗江县' :{}}, '绵阳' :{ '涪城区' :{}, '游仙区' :{}, '梓潼县' :{}, '三台县' :{}, '盐亭县' :{}, '安县' :{}, '平武县' :{}, '江油市' :{}, '北川羌族自治县' :{}}, '广元' :{ '利州区' :{}, '昭化区' :{}, '朝天区' :{}, '旺苍县' :{}, '青川县' :{}, '剑阁县' :{}, '苍溪县' :{}}, '遂宁' :{ '船山区' :{}, '安居区' :{}, '射洪县' :{}, '蓬溪县' :{}, '大英县' :{}}, '内江' :{ '市中区' :{}, '东兴区' :{}, '资中县' :{}, '隆昌县' :{}, '威远县' :{}}, '乐山' :{ '市中区' :{}, '沙湾区' :{}, '五通桥区' :{}, '金口河区' :{}, '犍为县' :{}, '井研县' :{}, '夹江县' :{}, '沐川县' :{}, '峨眉山市' :{}, '峨边彝族自治县' :{}, '马边彝族自治县' :{}}, '南充' :{ '顺庆区' :{}, '高坪区' :{}, '嘉陵区' :{}, '西充县' :{}, '南部县' :{}, '蓬安县' :{}, '营山县' :{}, '仪陇县' :{}, '阆中市' :{}}, '眉山' :{ '东坡区' :{}, '彭山区' :{}, '仁寿县' :{}, '丹棱县' :{}, '青神县' :{}, '洪雅县' :{}}, '宜宾' :{ '翠屏区' :{}, '南溪区' :{}, '宜宾县' :{}, '江安县' :{}, '长宁县' :{}, '高县' :{}, '筠连县' :{}, '珙县' :{}, '兴文县' :{}, '屏山县' :{}}, '广安' :{ '广安区' :{}, '前锋区' :{}, '邻水县' :{}, '武胜县' :{}, '岳池县' :{}, '华蓥市' :{}}, '达州' :{ '通川区' :{}, '达川区' :{}, '宣汉县' :{}, '开江县' :{}, '大竹县' :{}, '渠县' :{}, '万源市' :{}}, '雅安' :{ '雨城区' :{}, '名山区' :{}, '荥经县' :{}, '汉源县' :{}, '石棉县' :{}, '天全县' :{}, '芦山县' :{}, '宝兴县' :{}}, '巴中' :{ '巴州区' :{}, '恩阳区' :{}, '平昌县' :{}, '通江县' :{}, '南江县' :{}}, '资阳' :{ '雁江区' :{}, '安岳县' :{}, '乐至县' :{}, '简阳市' :{}}, '阿坝藏族羌族自治州' :{ '马尔康县' :{}, '金川县' :{}, '小金县' :{}, '阿坝县' :{}, '若尔盖县' :{}, '红原县' :{}, '壤塘县' :{}, '汶川县' :{}, '理县' :{}, '茂县' :{}, '松潘县' :{}, '九寨沟县' :{}, '黑水县' :{}}, '甘孜藏族自治州' :{ '康定县' :{}, '泸定县' :{}, '九龙县' :{}, '道孚县' :{}, '炉霍县' :{}, '甘孜县' :{}, '新龙县' :{}, '德格县' :{}, '白玉县' :{}, '石渠县' :{}, '色达县' :{}, '理塘县' :{}, '巴塘县' :{}, '乡城县' :{}, '稻城县' :{}, '得荣县' :{}}, '凉山彝族自治州' :{ '西昌市' :{}, '德昌县' :{}, '会理县' :{}, '会东县' :{}, '宁南县' :{}, '普格县' :{}, '布拖县' :{}, '昭觉县' :{}, '金阳县' :{}, '雷波县' :{}, '美姑县' :{}, '甘洛县' :{}, '越西县' :{}, '喜德县' :{}, '冕宁县' :{}, '盐源县' :{}, '木里藏族自治县' :{}} } } 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: parent_list.append(current_leval) current_leval = current_leval[choice] #进入子级 elif choice = = 'back' : if parent_list: current_leval = parent_list.pop() #取出父级(上一级) elif choice = = 'quit' : print ( '程序已退出' ) break else : print ( '无选项【%s】' % choice) |
很简单,我就不演示了
总结:
1.上面的代码利用了列表的pop方法,加上循环,最巧妙的就是重新赋值,然后while又重新循环下去,类似递归用法。
2.一样很简单的对吧?下一章还有多级目录的升级版,所以不多说了,需要怎么优化也不用多说
题外话:有没有发现前面的项目和现在的项目结合起来,基本可以写一个功能较全的程序了,具体什么程序后面再详解了
分类:
洗礼灵魂,修炼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】