example1:
menu={
'北京':{
'朝阳':{
'国贸':{},
'望京':{},
'三里屯':{},
},
'昌平':{},
'海淀':{},
},
'上海':{},
'山东':{},
}
while True:
for key in menu:
print(key)
choice=input(">>").strip()
if choice in menu:
for key2 in menu[choice]:
print(key2)
choice2=input(">>:").strip()
if choice2 in menu[choice]:
while True:
for key3 in menu[choice][choice2]:
print(key3)
example2:
menu = {
'北京': {
'朝阳': {
'国贸': {},
'CICC': {},
'HP': {},
'渣打银行': {},
'CCTV': {},
},
'望京': {
'陌陌': {},
'奔驰': {},
'360': {},
},
'三里屯': {
'优衣库': {},
'apple': {},
},
'昌平': {
'沙河': {
'老男孩': {},
'阿泰包子': {},
},
'天通苑': {
'链家': {},
'我爱我家': {},
},
'回龙观': {},
},
'海淀': {
'五道口': {
'谷歌': {},
'网易': {},
'sohu': {},
'快手': {},
},
'中关村': {
'youku': {},
'Iqiyi': {},
'汽车之家': {},
'新东方': {},
'QQ': {},
},
},
},
'上海': {
'浦东': {
'陆家嘴': {
'CICC': {},
'高盛': {},
'摩根': {},
},
},
'闵行': {},
'静安': {},
},
'山东': {
'济南': {},
'德州': {
'乐陵': {
'丁务镇': {},
'城区': {},
},
'平原': {},
},
'青岛': {},
},
}
floor = menu # 定义当前层为menu,实现动态循环;
empty_list = [] # 定义一个空列表,保存所有父级,最后一个元素永远都是父级;
while True: # while True 语句中一定要有结束该循环的break语句,否则会一直循环下去;
for key in floor:
print(key) # 打印菜单内容
# 让用户选择输入,strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列;
choice = input("请输入地址>>>【返回/b,退出/q】:").strip()
if choice == 'q': # 判断如果用户输入q,便break跳出循环;
break
# 判断用户如果输入的字符长度如果为0,便跳出本次循环;
if len(choice) == 0: # len() 方法返回对象(字符、列表、元组等)长度或项目个数。
continue
if choice in floor: # 如果用户输入的是菜单里的内容;
# 在进入下一层之前,把当前层追加到列表中;
# 下一次循环时,如果用户输入b,就可以直接取列表的最后一个值出来;
empty_list.append(floor) # append() 方法用于在列表末尾添加新的对象;
floor = floor[choice] # 改成下一层;
elif choice == 'b': # 如果用户输入b;
if empty_list: # 判断列表是否为空;
# pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
floor = empty_list.pop() # 取出列表最后一个值,因为他就是当前层的父级;
else:
print('您输入有误!')