需求: 可依次选择进入各子菜单 可从任意一层往回退到上一层 可从任意一层退出程序
源数据结构:
menu = {
'北京':{
'海淀':{
'五道口':{
'soho':{},
'网易':{},
'google':{}
},
'中关村':{
'爱奇艺':{},
'汽车之家':{},
'youku':{},
},
'上地':{
'百度':{},
},
},
'昌平':{
'沙河':{
'老男孩':{},
'北航':{},
},
'天通苑':{},
'回龙观':{},
},
'朝阳':{},
'东城':{},
},
'上海':{
'闵行':{
"人民广场":{
'炸鸡店':{}
}
},
'闸北':{
'火车战':{
'携程':{}
}
},
'浦东':{},
},
'山东':{},
}
新手丑陋第一版:
print(list(menu),"1:退出")
l=[menu]#将元数据分层切割保存到列表中,方便从任何一层返回上一级
while True:
choose=input("输入城市名或者数字:").strip()
if choose=='1':
break
if choose=='2' and len(l)!=1:
l.pop() #删除列表尾部对象
a=tuple(l[len(l)-1])
if choose in l[len(l)-1]:#下一级
a=tuple(l[len(l)-1][choose])
l.append(l[len(l)-1][choose])
else:
print("请输入正确的命令:")
if len(l)==1:
print(a,"1:退出")
else:
print(a,"1:退出","2:返回")
紧凑丑陋第二版:
l=[menu]
while True:
print(list(l[len(l)-1]))
choose=input("输入城市名或者数字1退出2返回:").strip()
if choose=='1':break
if choose=='2' and len(l)!=1:l.pop()
elif choose in l[len(l)-1]:l.append(l[len(l)-1][choose])
else:print("请输入正确的命令:")
三元表达式第三版:
l=[menu]
while True:
print(list(l[len(l)-1]))
choose=input("输入城市名或者数字1退出2返回:").strip()
exit() if choose=='1' else(l.pop() if choose=='2' and len(l)!=1 else (l.append(l[len(l)-1][choose]) if choose in l[len(l)-1] else print("请输入正确的命令")))
我在学习的过程中不止写了这些版本,核心思路基本没有变,变的只是形式,而且建议,并不是行数越少越好,原因略。