概述
要求:
1.可以进入子菜单
2.可以返回上一级
3.可以从任意一级直接退出
遇到的困难:
- 如何返回上一级(三种里用了return,break,和全局变量三种)
- 怎么在最上一层时按'b'(返回)能保持不动,在最后一层时继续输入下一个能不出错
字典的多级嵌套:[key for key in data] >>>['山东','江苏'] ,用循环遍历多级字典时只会返回一级,用[key for key in data['山东']]>>['青岛',‘济南’,‘烟台’]
基础版:
data = { '山东': { '青岛': ['四方', '黄岛', '崂山', '李沧', '城阳'], '济南': ['历城', '槐荫', '高新', '长青', '章丘'], '烟台': ['龙口', '莱山', '牟平', '蓬莱', '招远'] }, '江苏': { '苏州': ['沧浪', '相城', '平江', '吴中', '昆山'], '南京': ['白下', '秦淮', '浦口', '栖霞', '江宁'], '无锡': ['崇安', '南长', '北塘', '锡山', '江阴'] }, } exit_flag = False # 设置全局变量,用来退出循环,实现任意一级菜单都可以退出 while not exit_flag: for i1 in data: # 读取第一级菜单 print(i1) choice = input('选择进入1,第一级,按q退出:') if choice in data: while not exit_flag: for i2 in data[choice]: # 读取第二级菜单 print(i2) choice2 = input('选择进入2,按b返回上一级,按q退出:') if choice2 in data[choice]: while not exit_flag: for i3 in data[choice][choice2]: # 读取第三级菜单 print(i3) choice3 = input('选择进入3,按b返回上一级,按q退出:') if choice3 in data[choice][choice2]: for i4 in data[choice][choice2][choice3]: print(i4) choice4 = input('最后一层,按b返回上一级,按q退出:') if choice4 == 'b': pass # 占位符 if choice4 == 'q': exit_flag = True if choice3 == 'b': break if choice3 == 'q': exit_flag = True if choice2 == 'b': break if choice2 == 'q': exit_flag = True if choice == 'q': exit_flag = True
递归版:
# 用递归写三级菜单
# 此程序有两个问题,一是最顶端时输入“b”会直接退出,二是到最后一层再往下输时也会出错# 用递归写三级菜单 # 此程序有两个问题,一是最顶端时返回会出错,二是到最后一层再往下输时也会出错 def fact_dict(logs, counts): while True: print('请输入进入地区,输入b返回上层菜单,输入q退出'.center(40, '-')) name_lst = [key for key in logs] print('n'.join(name_lst)) print(type(logs)) choice = input('