Python 基础知识(字典三级菜单)
1 #_*_ encoding:utf-8 _*_ 2 ''' 3 Python 基础知识字典的练习: 4 "1".生成省、市、县三级菜单,运行程序供用户选择省,后列出省对应的市,选择市列出对应的县 5 "2".在市、县界面提供"b.返回上一级"功能 6 "3".提供一个"e.退出"功能,用户可以随时退出 7 ''' 8 ssx={"china":{"1":{"河北省":{"1":{"石家庄市":{"1":"高邑县","2":"无极县","3":"平山县","4":"赵县"}}, 9 "2":{"唐山市":{"1":"滦南县","2":"迁西县","3":"唐海县","4":"玉田县"}}, 10 "3":{"秦皇岛市":{"1":"昌黎县","2":"卢龙县","3":"抚宁县","4":"青龙满族自治县"}}, 11 "4":{"邢台市":{"1":"清河县","2":"宁晋县","3":"威县","4":"隆尧县"}} 12 } 13 }, 14 "2":{"浙江省":{"1":{"杭州市":{"1":"桐庐县","2":"淳安县","3":"建德县","4":"临安市"}}, 15 "2":{"嘉兴市":{"1":"平湖市","2":"桐乡市","3":"嘉善县","4":"海盐县"}}, 16 "3":{"绍兴市":{"1":"江山市","2":"龙游县","3":"常山县","4":"开化县"}}, 17 "4":{"宁波市":{"1":"慈溪市","2":"奉化市","3":"宁海县","4":"象山县"}} 18 } 19 }, 20 "3":{"湖南省":{"1":{"长沙市":{"1":"长沙县","2":"望城县","3":"宁乡县","4":"浏阳市"}}, 21 "2":{"湘潭市":{"1":"雨湖区","2":"岳塘区","3":"湘乡市","4":"湘潭县"}}, 22 "3":{"衡阳市":{"1":"衡阳县","2":"衡东县","3":"衡山县","4":"衡南县"}}, 23 "4":{"岳阳市":{"1":"汨罗市","2":"岳阳县","3":"平江县","4":"华容县"}} 24 } 25 }, 26 "4":{"山东省":{"1":{"济南市":{"1":"历下区","2":"市中区","3":"槐荫区","4":"天桥区"}}, 27 "2":{"青岛市":{"1":"市南区","2":"市北区","3":"四方区","4":"黄岛区"}}, 28 "3":{"淄博市":{"1":"张店区","2":"淄川区","3":"博山区","4":"临淄区"}}, 29 "4":{"临沂市":{"1":"苍山县","2":"平邑县","3":"莒南县","4":"蒙阴县"}} 30 } 31 } 32 } 33 } 34 curDict = {} 35 slt = "1" 36 level = 1 37 proName = "1" 38 proFlag = "1" 39 lastSlt = "1" 40 while(slt != "e"): 41 if(slt=="b"): 42 level-=2 43 slt = lastSlt 44 continue 45 if(level==1): 46 provinces = list(ssx["china"].keys()) 47 for p in provinces: 48 print(p,".",list(ssx["china"][p].keys())[0]) 49 50 slt = input("请输入你的编号,输入b返回上一级,输入e退出:") 51 lastSlt = slt 52 level=2 53 continue 54 if(level==2): 55 curDict = ssx["china"][slt] #当前的字典为省 56 proFlag = slt 57 proName = list(curDict.keys())[0] 58 curDict = curDict[proName] 59 cyties = list(curDict.keys()) 60 for c in cyties: 61 print(c,".",list(curDict[c].keys())[0]) 62 print("b.返回上一级") 63 level = 3 64 slt = input("请输入你的编号,输入b返回上一级,输入e退出:") 65 if(slt!="b"): 66 lastSlt = slt 67 68 continue 69 if(level==3): 70 curDict = list(ssx["china"][proFlag][proName][slt].values())[0] 71 contres = curDict.keys() 72 for c in contres: 73 print(c,".",curDict[c]) 74 print("b.返回上一级") 75 slt = input("请输入b返回上一级,输入e退出:") 76 if(slt!="b"): 77 lastSlt = slt 78 level = 4 79 80 continue
方法二:使用列表的队列的方式,将最后一次的菜单存放到队列中,在用户选择下级菜单则添加值到队列,用户选择返回上级则出对列
#_*_encoding:utf-8_*_ ''' 使用字典及列表相互转换的方式,供用户选择菜单中的一项并输入对应的菜单下内的内容,如果输入b,则返回上一级菜单 ''' menu_bak = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youku':{}, }, '上地':{ '百度':{}, }, }, '昌平':{ '沙河':{ '老男孩':{}, '北航':{}, }, '天通苑':{}, '回龙观':{}, }, '朝阳':{}, '东城':{}, }, '上海':{ '闵行':{ "人民广场":{ '炸鸡店':{} } }, '闸北':{ '火车战':{ '携程':{} } }, '浦东':{}, }, '山东':{}, } exit_flag = False current_layer = menu #当前菜单值,用于显示 layers = [] #将用户选择的菜单依次存放在最后,当选择一次返回时,将最后一个作为当前菜单显示,再删除最后一个 while not exit_flag: for k in current_layer: #输出当前菜单中的所有键值 print(k) print(" 返回(b) 退出(e)") choice = input(">>:").strip() #提示用户输入,并获取输入的内容,并去掉无效空格 if(choice == "e"): exit_flag = True if choice == "b" and len(layers)>0: current_layer = layers[-1] #将用户选择返回前显示的最后一个菜单显示出来 layers.pop() #将用户选择返回前显示的值从队列中删除 elif choice not in current_layer:continue else: #当用户选择一个菜单时,将当前显示菜单值存储到layers最后一个位置 layers.append(current_layer) current_layer = current_layer[choice] #将修改当前菜单值为用户选择的值,用于显示
浙公网安备 33010602011771号