python-三级菜单的优化实现

时间:2023-03-09 01:05:08
python-三级菜单的优化实现
三级菜单需求:
1.可依次选择进入各子菜单
2.可从任意一层往回退到上一层
3.可从任意一层退出程序
所需新知识点:列表、字典

先通过字典建立数据结构

 #创建字典
city_dic = {
"北京":{
"海淀区": {
"人大附中":{
"足球":{},
"篮球":{},
"排球":{},
}, "十一学校":{
"足球":{},
"篮球":{},
"排球":{},
},
"育英学校":{
"足球":{},
"篮球":{},
"排球":{},
},
},
"西城区":{
"北师大附中":{
"足球":{},
"篮球":{},
"排球":{},
},
"三十五中":{
"足球":{},
"篮球":{},
"排球":{},
},
"八中":{
"足球":{},
"篮球":{},
"排球":{},
}, },
"东城区":{
"四中":{
"足球":{},
"篮球":{},
"排球":{},
},
"二中":{
"足球":{},
"篮球":{},
"排球":{},
},
"一中":{
"足球":{},
"篮球":{},
"排球":{},
},
},
"朝阳区":{
"民大附中":{
"足球":{},
"篮球":{},
"排球":{},
},
"7中":{
"足球":{},
"篮球":{},
"排球":{},
},
"9中":{
"足球":{},
"篮球":{},
"排球":{},
}, },
},
"上海":{
"黄埔区":{
"3中":{
"足球":{},
"篮球":{},
"排球":{},
},
"4中": {
"足球":{},
"篮球":{},
"排球":{},
},
"5中": {
"足球":{},
"篮球":{},
"排球":{},
},
},
"徐汇区":{
"6中": {
"足球":{},
"篮球":{},
"排球":{},
},
"7中": {
"足球":{},
"篮球":{},
"排球":{},
},
"8中": {
"足球":{},
"篮球":{},
"排球":{},
},
},
"长宁区":{
"9中": {
"足球":{},
"篮球":{},
"排球":{},
},
"10中": {
"足球":{},
"篮球":{},
"排球":{},
},
"11中": {
"足球":{},
"篮球":{},
"排球":{},
},
},
},
"黑龙江":{
"哈尔滨":{
"1中": {
"足球":{},
"篮球":{},
"排球":{},
},
"2中":{
"足球":{},
"篮球":{},
"排球":{},
},
"3中": {
"足球":{},
"篮球":{},
"排球":{},
},
},
"大庆":{
"4中":{
"足球":{},
"篮球":{},
"排球":{},
},
"5中": {
"足球":{},
"篮球":{},
"排球":{},
},
"6中": {
"足球":{},
"篮球":{},
"排球":{},
},
},
"牡丹江":{
"7中":{
"足球":{},
"篮球":{},
"排球":{},
},
"8中": {
"足球":{},
"篮球":{},
"排球":{},
},
"9中": {
"足球":{},
"篮球":{},
"排球":{},
},
},
"佳木斯":{
"10中": {
"足球":{},
"篮球":{},
"排球":{},
},
"11中": {
"足球":{},
"篮球":{},
"排球":{},
},
"12中": {
"足球":{},
"篮球":{},
"排球":{},
},
},
},
}

优化版实现代码:15行
 current_layer = city_dic #当前层
last_layers = [city_dic] #把当前层赋值给列表,方便退出时使用
while True:
#循环打印字典列表key
for key in current_layer:
print(key)
choice = input(">>>:").strip() #等待用户输入
if choice == "": continue #判断是否为空,为空则continue,
if choice in current_layer: #进入下一层
last_layers.append(current_layer) #把当前层添加到列表
current_layer = current_layer[choice] #当前层变为选择choice的下一层
if choice == "b":
if last_layers:
current_layer = last_layers[-1] #从列表中取到最后一个值,即循环的上一层,赋值给current_layer
last_layers.pop() #取完列表中最后一个值后,要把它从列表中删除,pop()默认删除列表中最后一个,也可以写成pop(-1)
if choice == "q": break # 如果输入q,结束程序。