python之三级菜单
作业需求:
以中国区域名为例

china_map={ '华南':{ '广东':{'广州':['阿里','老男孩'],'佛山':['阿里','老男孩'],'深圳':['阿里','老男孩'],'东莞':['阿里','老男孩']}, '广西':{'南宁':['阿里','老男孩'],'柳州':['阿里','老男孩'],'桂林':['阿里','老男孩'],'北海':['阿里','老男孩']}, '海南':{'三亚':['阿里','老男孩'],'海口':['阿里','老男孩'],'三沙':['阿里','老男孩'],'詹州':['阿里','老男孩']}, '香港':{'屯门':['阿里','老男孩'],'湾仔':['阿里','老男孩'],'北角':['阿里','老男孩'],'西贡':['阿里','老男孩']}, '澳门':{'花地玛堂区':['阿里','老男孩'],'圣安多尼堂':['阿里','老男孩'],'望德堂区':['阿里','老男孩'],'大堂区':['阿里','老男孩']}, }, '华东':{ '江苏':{'南京':['阿里','老男孩'],'无锡':['阿里','老男孩'],'徐州':['阿里','老男孩'],'苏州':['阿里','老男孩'],'常州':['阿里','老男孩']}, '浙江':{'杭州':['阿里','老男孩'],'温州':['阿里','老男孩'],'宁波':['阿里','老男孩'],'台州':['阿里','老男孩'],'舟山':['阿里','老男孩']}, '安徽':{'合肥':['阿里','老男孩'],'芜湖':['阿里','老男孩'],'蚌埠':['阿里','老男孩'],'滁州':['阿里','老男孩'],'阜阳':['阿里','老男孩'],'宿州':['阿里','老男孩'],'六安':['阿里','老男孩'],'宣城':['阿里','老男孩']}, '福建':{'福州':['阿里','老男孩'],'厦门':['阿里','老男孩'],'泉州':['阿里','老男孩'],'漳州':['阿里','老男孩'],'莆田':['阿里','老男孩'],'龙岩':['阿里','老男孩']}, '江西':{'南昌':['阿里','老男孩'],'景德镇':['阿里','老男孩'],'萍乡':['阿里','老男孩'],'九江':['阿里','老男孩'],'赣州':['阿里','老男孩'],'宜春':['阿里','老男孩']}, '山东':{'济南':['阿里','老男孩'],'泰安':['阿里','老男孩'],'德州':['阿里','老男孩'],'曲阜':['阿里','老男孩']}, '上海':{'黄埔':['阿里','老男孩'],'徐汇':['阿里','老男孩'],'长宁':['阿里','老男孩'],'虹口':['阿里','老男孩']}, }, '华中':{ '湖北':{'武汉':['阿里','老男孩'],'黄石':['阿里','老男孩'],'十堰':['阿里','老男孩'],'襄阳':['阿里','老男孩'],'宜昌':['阿里','老男孩'],'鄂州':['阿里','老男孩'],'荆州':['阿里','老男孩']}, '湖南':{'长沙':['阿里','老男孩'],'株洲':['阿里','老男孩'],'邵阳':['阿里','老男孩'],'岳阳':['阿里','老男孩'],'郴州':['阿里','老男孩']}, '河南':{'郑州':['阿里','老男孩'],'开封':['阿里','老男孩'],'洛阳':['阿里','老男孩'],'焦作':['阿里','老男孩'],'平顶山':['阿里','老男孩']}, }, '华北':{ '北京':{'东城':['阿里','老男孩'],'西城':['阿里','老男孩'],'朝阳':['阿里','老男孩'],'海淀':['阿里','老男孩'],'石景山':['阿里','老男孩'],'大兴':['阿里','老男孩'],'丰台':['阿里','老男孩'],'昌平':['阿里','老男孩']}, '山西':{'太原':['阿里','老男孩'],'吕梁':['阿里','老男孩'],'晋中':['阿里','老男孩'],'长治':['阿里','老男孩'],'大同':['阿里','老男孩'],'阳泉':['阿里','老男孩'],'晋城':['阿里','老男孩'],'朔州':['阿里','老男孩'],'忻州':['阿里','老男孩'],'临汾':['阿里','老男孩']}, '河北':{'石家庄':['阿里','老男孩'],'邯郸':['阿里','老男孩'],'廊坊':['阿里','老男孩'],'保定':['阿里','老男孩'],'张家口':['阿里','老男孩'],'唐山':['阿里','老男孩'],'秦皇岛':['阿里','老男孩'],'沧州':['阿里','老男孩']}, '天津':{'和平区':['阿里','老男孩'],'河东区':['阿里','老男孩'],'河北区':['阿里','老男孩'],'南开区':['阿里','老男孩'],'武清':['阿里','老男孩']}, '内蒙':{'呼和浩特':['阿里','老男孩'],'鄂尔多斯':['阿里','老男孩'],'乌海':['阿里','老男孩'],'通辽':['阿里','老男孩'],'呼伦贝尔':['阿里','老男孩'],'乌兰浩特':['阿里','老男孩']}, }, '西南':{ '四川':{'成都':['阿里','老男孩'],'自贡':['阿里','老男孩'],'攀枝花':['阿里','老男孩'],'乐山':['阿里','老男孩'],'遂宁':['阿里','老男孩']}, '云南':{'昆明':['阿里','老男孩'],'曲靖':['阿里','老男孩'],'玉溪':['阿里','老男孩'],'丽江':['阿里','老男孩'],'曲靖':['阿里','老男孩']}, '贵州':{'贵阳':['阿里','老男孩'],'六盘水':['阿里','老男孩'],'遵义':['阿里','老男孩'],'安顺':['阿里','老男孩'],'毕节':['阿里','老男孩'],'铜仁':['阿里','老男孩']}, '重庆':{'万州':['阿里','老男孩'],'涪陵':['阿里','老男孩'],'渝中':['阿里','老男孩'],'大渡口':['阿里','老男孩']}, '西藏':{'拉萨':['阿里','老男孩'],'那曲':['阿里','老男孩'],'山南':['阿里','老男孩'],'昌都':['阿里','老男孩'],'林芝':['阿里','老男孩'],'日喀则':['阿里','老男孩']}, }, '西北':{ '宁夏':{'银川':['阿里','老男孩'],'石嘴山':['阿里','老男孩'],'吴忠市':['阿里','老男孩'],'固原市':['阿里','老男孩'],'中卫市':['阿里','老男孩']}, '陕西':{'西安':['阿里','老男孩'],'铜川':['阿里','老男孩'],'宝鸡':['阿里','老男孩'],'咸阳':['阿里','老男孩'],'渭南':['阿里','老男孩'],'汉中':['阿里','老男孩'],'榆林':['阿里','老男孩']}, '甘肃':{'兰州':['阿里','老男孩'],'天水':['阿里','老男孩'],'张掖':['阿里','老男孩'],'酒泉':['阿里','老男孩'],'嘉峪关':['阿里','老男孩'],'庆阳':['阿里','老男孩'],'陇南':['阿里','老男孩']}, '新疆':{'乌鲁木齐':['阿里','老男孩'],'克拉玛依':['阿里','老男孩'],'哈密':['阿里','老男孩'],'库尔勒':['阿里','老男孩'],'昌吉':['阿里','老男孩'],'博尔塔拉':['阿里','老男孩']}, }, '东北':{ '黑龙江':{'哈尔滨':['阿里','老男孩'],'齐齐哈尔':['阿里','老男孩'],'鸡西':['阿里','老男孩'],'牡丹江':['阿里','老男孩'],'大兴安岭地区':['阿里','老男孩'],'黑河':['阿里','老男孩']}, '吉林':{'长春':['阿里','老男孩'],'延吉':['阿里','老男孩'],'四平':['阿里','老男孩'],'吉林':['阿里','老男孩'],'松原':['阿里','老男孩']}, '辽宁':{'沈阳':['阿里','老男孩'],'葫芦岛':['阿里','老男孩'],'大连':['阿里','老男孩'],'鞍山':['阿里','老男孩'],'营口':['阿里','老男孩'],'辽阳':['阿里','老男孩'],'朝阳':['阿里','老男孩']}, } }
思路分析
1.这里用了嵌套,感觉代码写下来,也没有什么难度的。
2.首先要想,如何能把最大的区域(华南,西南……)这类打印出来,而且前面要有序号?
这里我用for i in china_map: 发现i就是(华南,西南……),把i加到空列表,
print(area_list.index(i),i)这样就有前面序号了
3.然后用一个while循环,接下来就要分类了,如果不是数字(q,b,其它),如果是数字
还要看有没超界。
4.如果一切顺利,就自然会想到,接下来如何把省给打印出来?自然是再用一个while循环。
这不就和第2点类似!
重要代码:
area_map = china_map[area_list[int(area_num)]]
根据输入的序号,得到(华南,西南……)中的一个,从字典可再得到包括各省以内的map
代码与详解

import sys china_map={ '华南':{ '广东':{'广州':['阿里','老男孩'],'佛山':['阿里','老男孩'],'深圳':['阿里','老男孩'],'东莞':['阿里','老男孩']}, '广西':{'南宁':['阿里','老男孩'],'柳州':['阿里','老男孩'],'桂林':['阿里','老男孩'],'北海':['阿里','老男孩']}, '海南':{'三亚':['阿里','老男孩'],'海口':['阿里','老男孩'],'三沙':['阿里','老男孩'],'詹州':['阿里','老男孩']}, '香港':{'屯门':['阿里','老男孩'],'湾仔':['阿里','老男孩'],'北角':['阿里','老男孩'],'西贡':['阿里','老男孩']}, '澳门':{'花地玛堂区':['阿里','老男孩'],'圣安多尼堂':['阿里','老男孩'],'望德堂区':['阿里','老男孩'],'大堂区':['阿里','老男孩']}, }, '华东':{ '江苏':{'南京':['阿里','老男孩'],'无锡':['阿里','老男孩'],'徐州':['阿里','老男孩'],'苏州':['阿里','老男孩'],'常州':['阿里','老男孩']}, '浙江':{'杭州':['阿里','老男孩'],'温州':['阿里','老男孩'],'宁波':['阿里','老男孩'],'台州':['阿里','老男孩'],'舟山':['阿里','老男孩']}, '安徽':{'合肥':['阿里','老男孩'],'芜湖':['阿里','老男孩'],'蚌埠':['阿里','老男孩'],'滁州':['阿里','老男孩'],'阜阳':['阿里','老男孩'],'宿州':['阿里','老男孩'],'六安':['阿里','老男孩'],'宣城':['阿里','老男孩']}, '福建':{'福州':['阿里','老男孩'],'厦门':['阿里','老男孩'],'泉州':['阿里','老男孩'],'漳州':['阿里','老男孩'],'莆田':['阿里','老男孩'],'龙岩':['阿里','老男孩']}, '江西':{'南昌':['阿里','老男孩'],'景德镇':['阿里','老男孩'],'萍乡':['阿里','老男孩'],'九江':['阿里','老男孩'],'赣州':['阿里','老男孩'],'宜春':['阿里','老男孩']}, '山东':{'济南':['阿里','老男孩'],'泰安':['阿里','老男孩'],'德州':['阿里','老男孩'],'曲阜':['阿里','老男孩']}, '上海':{'黄埔':['阿里','老男孩'],'徐汇':['阿里','老男孩'],'长宁':['阿里','老男孩'],'虹口':['阿里','老男孩']}, }, '华中':{ '湖北':{'武汉':['阿里','老男孩'],'黄石':['阿里','老男孩'],'十堰':['阿里','老男孩'],'襄阳':['阿里','老男孩'],'宜昌':['阿里','老男孩'],'鄂州':['阿里','老男孩'],'荆州':['阿里','老男孩']}, '湖南':{'长沙':['阿里','老男孩'],'株洲':['阿里','老男孩'],'邵阳':['阿里','老男孩'],'岳阳':['阿里','老男孩'],'郴州':['阿里','老男孩']}, '河南':{'郑州':['阿里','老男孩'],'开封':['阿里','老男孩'],'洛阳':['阿里','老男孩'],'焦作':['阿里','老男孩'],'平顶山':['阿里','老男孩']}, }, '华北':{ '北京':{'东城':['阿里','老男孩'],'西城':['阿里','老男孩'],'朝阳':['阿里','老男孩'],'海淀':['阿里','老男孩'],'石景山':['阿里','老男孩'],'大兴':['阿里','老男孩'],'丰台':['阿里','老男孩'],'昌平':['阿里','老男孩']}, '山西':{'太原':['阿里','老男孩'],'吕梁':['阿里','老男孩'],'晋中':['阿里','老男孩'],'长治':['阿里','老男孩'],'大同':['阿里','老男孩'],'阳泉':['阿里','老男孩'],'晋城':['阿里','老男孩'],'朔州':['阿里','老男孩'],'忻州':['阿里','老男孩'],'临汾':['阿里','老男孩']}, '河北':{'石家庄':['阿里','老男孩'],'邯郸':['阿里','老男孩'],'廊坊':['阿里','老男孩'],'保定':['阿里','老男孩'],'张家口':['阿里','老男孩'],'唐山':['阿里','老男孩'],'秦皇岛':['阿里','老男孩'],'沧州':['阿里','老男孩']}, '天津':{'和平区':['阿里','老男孩'],'河东区':['阿里','老男孩'],'河北区':['阿里','老男孩'],'南开区':['阿里','老男孩'],'武清':['阿里','老男孩']}, '内蒙':{'呼和浩特':['阿里','老男孩'],'鄂尔多斯':['阿里','老男孩'],'乌海':['阿里','老男孩'],'通辽':['阿里','老男孩'],'呼伦贝尔':['阿里','老男孩'],'乌兰浩特':['阿里','老男孩']}, }, '西南':{ '四川':{'成都':['阿里','老男孩'],'自贡':['阿里','老男孩'],'攀枝花':['阿里','老男孩'],'乐山':['阿里','老男孩'],'遂宁':['阿里','老男孩']}, '云南':{'昆明':['阿里','老男孩'],'曲靖':['阿里','老男孩'],'玉溪':['阿里','老男孩'],'丽江':['阿里','老男孩'],'曲靖':['阿里','老男孩']}, '贵州':{'贵阳':['阿里','老男孩'],'六盘水':['阿里','老男孩'],'遵义':['阿里','老男孩'],'安顺':['阿里','老男孩'],'毕节':['阿里','老男孩'],'铜仁':['阿里','老男孩']}, '重庆':{'万州':['阿里','老男孩'],'涪陵':['阿里','老男孩'],'渝中':['阿里','老男孩'],'大渡口':['阿里','老男孩']}, '西藏':{'拉萨':['阿里','老男孩'],'那曲':['阿里','老男孩'],'山南':['阿里','老男孩'],'昌都':['阿里','老男孩'],'林芝':['阿里','老男孩'],'日喀则':['阿里','老男孩']}, }, '西北':{ '宁夏':{'银川':['阿里','老男孩'],'石嘴山':['阿里','老男孩'],'吴忠市':['阿里','老男孩'],'固原市':['阿里','老男孩'],'中卫市':['阿里','老男孩']}, '陕西':{'西安':['阿里','老男孩'],'铜川':['阿里','老男孩'],'宝鸡':['阿里','老男孩'],'咸阳':['阿里','老男孩'],'渭南':['阿里','老男孩'],'汉中':['阿里','老男孩'],'榆林':['阿里','老男孩']}, '甘肃':{'兰州':['阿里','老男孩'],'天水':['阿里','老男孩'],'张掖':['阿里','老男孩'],'酒泉':['阿里','老男孩'],'嘉峪关':['阿里','老男孩'],'庆阳':['阿里','老男孩'],'陇南':['阿里','老男孩']}, '新疆':{'乌鲁木齐':['阿里','老男孩'],'克拉玛依':['阿里','老男孩'],'哈密':['阿里','老男孩'],'库尔勒':['阿里','老男孩'],'昌吉':['阿里','老男孩'],'博尔塔拉':['阿里','老男孩']}, }, '东北':{ '黑龙江':{'哈尔滨':['阿里','老男孩'],'齐齐哈尔':['阿里','老男孩'],'鸡西':['阿里','老男孩'],'牡丹江':['阿里','老男孩'],'大兴安岭地区':['阿里','老男孩'],'黑河':['阿里','老男孩']}, '吉林':{'长春':['阿里','老男孩'],'延吉':['阿里','老男孩'],'四平':['阿里','老男孩'],'吉林':['阿里','老男孩'],'松原':['阿里','老男孩']}, '辽宁':{'沈阳':['阿里','老男孩'],'葫芦岛':['阿里','老男孩'],'大连':['阿里','老男孩'],'鞍山':['阿里','老男孩'],'营口':['阿里','老男孩'],'辽阳':['阿里','老男孩'],'朝阳':['阿里','老男孩']}, } } #三级菜单 #可依次选择进入各子菜单 #area_map=china_map[area_list[int(area_num)]] area_list = [] for i in china_map: area_list.append(i) #i为华北,华中,注意字典是无序的 break_flag = False #标志位 while not break_flag: for i in area_list: print(area_list.index(i),i) area_num = input("请输入选择的地区序号(q:quit;b:back):") if area_num.isdigit(): #如果是数字 if int(area_num) >= len(area_list): #如果数字超界 print("输入数字不能超过最大序号") else: #进入下一级列表 area_map = china_map[area_list[int(area_num)]] #包括各省 #print(area_map) #易于调试 province_list = [] #空列表,用来装省份 for i in area_map: #将选定省加入空列表 province_list.append(i) break_provin_flag = False while not break_provin_flag: for i in province_list: print(province_list.index(i), i) province_num = input("请输入选择的省份序号(q:quit;b:back):") if province_num.isdigit(): # 如果是数字 if int(province_num) >= len(province_list): # 如果数字超界 print("输入数字不能超过最大序号") else: #进入下一级列表 city_map = area_map[province_list[int(province_num)]] #包括各市 #print(city_map) #易于调试 city_list = [] #将各市放入空列表 for i in city_map: city_list.append(i) #print(city_list) #易于调试 city_break_flag = False while not city_break_flag: for i in city_list: #打印各市及序号 print(city_list.index(i), i) city_num = input("请输入选定市的序号(q:quit;b:back):") if city_num.isdigit(): #是数字 if int(city_num) >= len(city_list): #越界 print("输入数字不能超过最大序号") else: # 根据选定城市的序号,找到相应城市,再通过选定城市找到城市下的地区 fina_map = city_map[city_list[int(city_num)]] #print(fina_map) #易于调试 fina_list = [] for i in fina_map: fina_list.append(i) for i in fina_list: print(fina_list.index(i), i) print("END".center(50,'-')) else: #不是数字 if city_num == 'q': sys.exit() elif city_num == 'b': city_break_flag = True else: print("请输入数字") else: if province_num == 'q': sys.exit() elif province_num == 'b': break_provin_flag = True else: print("请输入数字") else: if area_num == 'q': #返回 break_flag = True elif area_num == 'b': print("已经是主界面,不能返回了SB") else: print("请输入数字")
运行结果

0 华北 1 华东 2 西北 3 华中 4 西南 5 华南 6 东北 请输入选择的地区序号(q:quit;b:back):4 0 西藏 1 云南 2 贵州 3 重庆 4 四川 请输入选择的省份序号(q:quit;b:back):4 0 遂宁 1 成都 2 自贡 3 乐山 4 攀枝花 请输入选定市的序号(q:quit;b:back):4 0 阿里 1 老男孩 -----------------------END------------------------ 0 遂宁 1 成都 2 自贡 3 乐山 4 攀枝花 请输入选定市的序号(q:quit;b:back):q
流程图
流程图参考 http://www.cnblogs.com/ccorz/p/5481271.html#3440150
作者:前程明亮
出处:http://www.cnblogs.com/0zcl
文章未标明转载则为原创博客。欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
出处:http://www.cnblogs.com/0zcl
文章未标明转载则为原创博客。欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
1.非系统的学习也是在浪费时间
2.做一个会欣赏美,懂艺术,会艺术的技术人
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?