版权声明:请注明原创地址 https://blog.csdn.net/xy_best_/article/details/83340727
1、可依次选择进入各子菜单
2、可从任意一层往回退到上一层
3、可从任意一层退出程序
menu = {
'北京': {
'海淀': {
'五道口': {'soho': {}, '网易': {}, 'google': {}},
'中关村': {'爱奇艺': {}, '汽车之家': {}, 'youku': {}},
'上地': {'百度': {}},
},
'昌平': {
'沙河': {'老男孩': {}, '北航': {}}, '天通苑': {}, '回龙观': {}},
'朝阳': {},
'东城': {},
},
'上海': {
'闵行': {"人民广场": {'炸鸡店': {}}},
'闸北': {'火车站': {'携程': {}}},
'浦东': {},
},
'山东': {},
}
# 三种方法,其中第三种最为简单,第二种用了递归函数
# ----------------------------第一种方法--------------------
initial = []
while True:
for i in menu:
print(i)
name = input("B/b为返回上层,Q/q为退出程序,请输入查看的内容>>>: ").strip()
if name in menu:
initial.append(menu) # 每次执行将父级的内容添加到列表中,
menu = menu[name] # 重新赋值,以便下次 if 来判断
elif name == "b" or name == "B":
if len(initial) == 0:
print("已经在最顶层,无法继续返回")
continue
menu = initial.pop() # 删除最后列表中最后一个,并返回,来模拟返回后显示上层的数据内容
elif name == "q" or name == "Q":
break
else:
print("输入内容错误,请重新输入")
# ----------------------------第二种方法--------------------
def threeLM(dic):
while True:
for k in dic:
print(k) # 打印当前的一级城市
key = input('input>>').strip()
if key == 'b' or key == 'q':
print(key)
return key
elif key in dic.keys() and dic[key]:
ret = threeLM(dic[key]) """ 递归函数,每次输入城市时,其实就相当于又执行了一遍函数,只不过执行函数的参数有变化,
当输入b时,执行return,就跳出了当前层函数,回到了上级函数中的循环,参数也是上级的参数,就会有返回上级城市的输出,当然如果当前
是最外面的函数,程序就退出,无论在哪一级城市,当输入q时,跳出当前函数,把值赋值给ret,然后跳出循环
"""
if ret == 'q':
return 'q'
threeLM(menu)
# ----------------------------第三种方法--------------------
dic = [menu]
num = {}
while dic:
for index, key in enumerate(dic[-1], 1):
print(index, ":", key)
num[index] = key
k = input('输入b(回上级)或q(退出)>>:').strip()
print(num)
if k.isdigit():
k = num[int(k)]
print(k)
if k in dic[-1].keys() and dic[-1][k]:
dic.append(dic[-1][k])
elif k == 'b':
dic.pop()
elif k == 'q':
break