Python 之 三级菜单
一、 要求
- 可依次选择进入各子菜单
- 可从任意一层往回退到上一层
- 可从任意一层退出程序
二、题目分析与方案
首先给出三级菜单:
menu = {
"江西省": {
"南昌市": {"南昌县", "高新县", "新建县"},
"九江市": {"都昌县", "星子县", "湖口县", "彭泽县"},
"上饶市": {"广丰县", "余干县", "鄱阳县", "德兴县"}
},
"广东省": {
"深圳市": {"罗湖县", "福田县", "南山县"},
"清远市": {"清城县", "清新县", "连州县", "佛冈县"},
"广州市": {"荔湾县", "越秀县", "海珠县", "天河县", "白云县"}
},
"河北省": {
"北京市": {"朝阳县", "丰台县", "石景山县", "海淀县", "门头沟县"},
"廊坊市": {"安次县", "广阳县", "霸州县", "三河县", "固安县"},
"承德市": {"双桥县", "双滦县", "平泉县", "承德县"}
},
"辽宁省": {
"大连市": {"中山县", "西岗县", "沙河口县", "甘井子县"},
"沈阳市": {"和平县", "沈河县", "大东县", "皇姑县", "铁西县"},
"鞍山市": {"铁东县", "铁西县", "立山县", "千山县", "海城县"}
}
}
我们通过K-V的形式通过K值能够找到相对应的V值,通过循环的形式可以将菜单中的K值全都打印出来,然后用户输入来的K值,对其操作生成新的字典,将旧字典保留在一个列表中,方便返回的时候使用,同时还要对查询不到的地区或者是极限地区(最上层或最下层)进行处理,具体看代码:
countList = [] # 记录到达每一层的字典
while True:
for k in menu:
print(k)
choice = input("(上一层按“s”,退出按“q”)>>>:").strip()
if choice in ["s","S"] and len(countList) != 0: # 当换回上一层的时候,countList列表中记录的旧字典替换掉了新字典,并且列表除去旧字典,
# 也即是列表最后的一个元素永远是当前字典的前身,就是上一级
menu = countList.pop(-1)
elif choice in ["q","Q"]:
exit(0)
elif choice not in menu or type(menu) is set or (choice in ["s","S"] and len(countList) == 0):
print("没有发现该地区或者已是最小、最大地区!!!")
else:
countList.append(menu) # 每次选择不同的地区都会生成新的字典,此处的作用是记录被新字典替换掉的旧字典
menu = menu[choice] # 每次的选择都会更新字典