打印省、市、县三级菜单
可返回上一级
可随时退出程序
用递归实现: menu = { ‘北京‘: { ‘海淀‘: { ‘五道口‘: { ‘soho‘: {}, ‘网易‘: {}, ‘google‘: {} }, ‘中关村‘: { ‘爱奇艺‘: {}, ‘汽车之家‘: {}, ‘youku‘: {}, }, ‘上地‘: { ‘百度‘: {}, }, }, ‘昌平‘: { ‘沙河‘: { ‘老男孩‘: {}, ‘北航‘: {}, }, ‘天通苑‘: {}, ‘回龙观‘: {}, }, ‘朝阳‘: {}, ‘东城‘: {}, }, ‘上海‘: { ‘闵行‘: { "人民广场": { ‘炸鸡店‘: {} } }, ‘闸北‘: { ‘火车战‘: { ‘携程‘: {} } }, ‘浦东‘: {}, }, ‘山东‘: {}, } def threeMenu(dic): while 1: for k in dic: print(k) key = input(‘输入城市(按b返回上一层,按q退出):‘) if key == ‘b‘ or key == ‘q‘: return key elif key in dic.keys() and dic[key]: ret = threeMenu(dic[key]) if ret == ‘q‘: return ret elif (not dic.get(key)) or (not dic[key]): continue
-
用堆栈实现 menu = { ‘北京‘: { ‘海淀‘: { ‘五道口‘: { ‘soho‘: {}, ‘网易‘: {}, ‘google‘: {} }, ‘中关村‘: { ‘爱奇艺‘: {}, ‘汽车之家‘: {}, ‘youku‘: {}, }, ‘上地‘: { ‘百度‘: {}, }, }, ‘昌平‘: { ‘沙河‘: { ‘老男孩‘: {}, ‘北航‘: {}, }, ‘天通苑‘: {}, ‘回龙观‘: {}, }, ‘朝阳‘: {}, ‘东城‘: {}, }, ‘上海‘: { ‘闵行‘: { "人民广场": { ‘炸鸡店‘: {} } }, ‘闸北‘: { ‘火车战‘: { ‘携程‘: {} } }, ‘浦东‘: {}, }, ‘山东‘: {}, } l = [menu] while l: for k in l[-1]: print(k) key = input(‘输入城市(按b返回上一层,按q退出):‘) if key in l[-1].keys() and l[-1][key]: l.append(l[-1][key]) elif key == ‘b‘: l.pop() elif key == ‘q‘: break else: continue
#!/user/bin/env python #-*-coding:utf-8 -*- #Author: qinjiaxi ‘‘‘需求: 1.设计一个三级菜单 2.在任意时候可以返回上级菜单 3.在任何一级菜单里面可以随时退出程序 思路:设计一个嵌套字典用于存储菜单内容 --->利用嵌套循环打印每一级的内容 --->然后判断输入条件根据输入条件选择是否退出和返回上级 ‘‘‘ data = { "武汉": { "光谷":{ "关山":[‘文华‘,‘华科‘,‘湖科‘] }, "江夏":{ "郊外":[‘湖经‘,‘楚天‘,‘纺大‘] } }, "北京":{ ‘朝阳‘:{ ‘a‘:[1,2,3] } }, "上海":{ "市内":{ ‘b‘:[2,3,4] } } } print(data) exit_flag = False#设置一个退出标志 while not exit_flag: for i in data: print(i)#第一层 choice = input(‘选择进入1>>>:‘) if choice in data: while not exit_flag: for i2 in data[choice]: print(‘\t‘, i2)#第二层 choice2 = input(‘选择进入2>>>:‘) if choice2 in data[choice]: while not exit_flag: for i3 in data[choice][choice2]: print(‘\t\t‘, i3)#第三层 choice3 = input(‘选择进入3>>>:‘) if choice3 in data[choice][choice2]: for i4 in data[choice][choice2][choice3]: print(‘\t\t‘, i4) choice4 = input(‘最后一层,按b返回>>>:‘) if choice4 == ‘b‘: pass elif choice4 == ‘q‘: exit_flag = True if choice3 == ‘b‘: break elif choice3 == ‘q‘: exit_flag = True if choice2 == ‘b‘: break elif choice2 == ‘q‘: exit_flag = True elif choice == ‘q‘: exit_flag = True
-
# _author : Ahern Li # @_date : 2017/9/12 menu = { ‘浙江省‘:{ ‘杭州市‘:{ ‘余杭区‘:{‘中泰‘:{},‘临平‘:{}}, ‘西湖区‘:{‘西湖‘:{},‘留下‘:{}} }, ‘温州市‘:{ ‘苍南县‘:{‘灵溪‘:{},‘龙港‘:{}}, ‘瑞安县‘:{‘安阳‘:{},‘锦湖‘:{}} } }, ‘广东省‘:{ ‘广州市‘:{ ‘越秀区‘:{‘人民路‘:{},‘北京路‘:{}}, ‘荔湾区‘:{‘沙面‘:{},‘龙津‘:{}} }, ‘珠海市‘:{ ‘香洲区‘:{‘拱北‘:{},‘吉大‘:{}}, ‘金湾区‘:{‘红旗镇‘:{},‘平沙镇‘:{}} } } } # 返回标记 q_flag = True # 退出标记 Q_flag = True # 返回,退出标记出现False退出循环 while q_flag and Q_flag: # 遍历打印省份 for i in menu: print(i) province = input(‘请输入要查找的省份(Q,退出):‘).strip() if province in menu: while q_flag and Q_flag: for i in menu[province]: print(i) city = input(‘请输入要查找的市(q,返回 或 Q,退出):‘).strip() if city in menu[province]: while q_flag and Q_flag: for i in menu[province][city]: print(i) county = input(‘请输入要查找的区或县(q,返回 或 Q,退出):‘).strip() if county in menu[province][city]: while q_flag and Q_flag: for i in menu[province][city][county]: print(i) # 提示最后一页,输入格式 choice = input(‘最后一页! q,返回 或 Q,退出:‘).strip() if choice == ‘q‘: # 配合 else: q_flag = True 退出该层循环,返回上层循环 q_flag = False elif choice == ‘Q‘: # 退出大循环 Q_flag = False else: # 提示输入不合法 print(‘输入错误!‘) # 改回 q_flag 的值,实现只退出一层循环 else: q_flag = True elif county == ‘q‘: q_flag = False elif county == ‘Q‘: Q_flag = False else: print(‘输入错误!‘) else: q_flag = True elif city == ‘q‘: q_flag = False elif city == ‘Q‘: Q_flag = False else: print(‘输入错误!‘) else: q_flag = True elif province == ‘Q‘: Q_flag = False else: print(‘输入错误!‘)
-
# _author : Ahern Li # @_date : 2017/9/12 menu = { ‘浙江省‘:{ ‘杭州市‘:{ ‘余杭区‘:{‘中泰‘:{},‘临平‘:{}}, ‘西湖区‘:{‘西湖‘:{},‘留下‘:{}} }, ‘温州市‘:{ ‘苍南县‘:{‘灵溪‘:{},‘龙港‘:{}}, ‘瑞安县‘:{‘安阳‘:{},‘锦湖‘:{}} } }, ‘广东省‘:{ ‘广州市‘:{ ‘越秀区‘:{‘人民路‘:{},‘北京路‘:{}}, ‘荔湾区‘:{‘沙面‘:{},‘龙津‘:{}} }, ‘珠海市‘:{ ‘香洲区‘:{‘拱北‘:{},‘吉大‘:{}}, ‘金湾区‘:{‘红旗镇‘:{},‘平沙镇‘:{}} } } } current_layer = menu # 实现动态循环 parent_layer = [] # 保留所有父层,最后一个元素永远为父层 while True: print() # 仅为了打印美观 for i in current_layer: # 遍历打印地址 print(i) choice = input(‘请在下方输入查询地址\n>>>:‘).strip() if choice in current_layer: if current_layer[choice]: # 判断是否为末层 parent_layer.append(current_layer) # 进入子层前,添加当前层作为父层 current_layer = current_layer[choice] # 修改子层 else: print(‘当前是最后一页‘) elif choice == ‘‘: continue elif choice == ‘q‘: # 返回上层 if parent_layer: # 判断 parent_layer 是否为空 current_layer = parent_layer.pop() # 取出当前层父层 # 退出循环 elif choice == ‘Q‘: break else: print(‘输入错误!‘)
原文地址:https://www.cnblogs.com/dongye95/p/10193479.html
时间: 2024-10-21 21:08:42