欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python 三级菜单

程序员文章站 2022-07-14 22:58:31
...
可依次选择进入各子菜单
可从任意一层往回退到上一层
可从任意一层退出程序
所需新知识点:列表、字典

自己想的,菜鸟版的

#!/usr/bin/env python

# -*- coding: utf-8 -*-
menu = {
    '北京':{
        '海淀':{
            '五道口':{
                'soho':{},
                '网易':{},
                'google':{}
            },
            '中关村':{
                '爱奇艺':{},
                '汽车之家':{},
                'youku':{},
            },
            '上地':{
                '百度':{},
            },
        },
        '昌平':{
            '沙河':{
                '老男孩':{},
                '北航':{},
            },
            '天通苑':{},
            '回龙观':{},
        },
        '朝阳':{},
        '东城':{},
    },
    '上海':{
        '闵行':{
            "人民广场":{
                '炸鸡店':{}
            }
        },
        '闸北':{
            '火车站':{
                '携程':{}
            }
        },
        '浦东':{},
    },
    '山东':{},
}

while True:
    for i in menu:
        print(i)
    choice = input("input:")
    if choice in menu:
        while True:
            for i2 in menu[choice]:
                print(i2)
            choice2 = input("input2:")
            if choice2 in menu[choice]:
                while True:
                    for i3 in menu[choice][choice2]:
                        print(i3)
                    choice3 = input("input3:")
                    if choice3 in menu[choice][choice2]:
                        for i4 in menu[choice][choice2][choice3]:
                            print(i4)
                        choice4 = input("请输入b返回上一级,或者输入q退出程序:")
                        if choice4 == "b":
                            pass
                        elif choice4 == "q":
                            exit()
                    if choice3 == "b":
                        break
                    elif choice3 == "q":
                        exit()
            if choice2 == "b":
                break
            elif choice2 == "q":
                exit()
    if choice == "q" :
        exit()

只用一个while的,优化版本

借鉴的别人的代码学习一哈

https://blog.csdn.net/sinat_38163598/article/details/77793478

current_layer=menu #实现动态循环
parent_layer=[] #保存所有父级,最后一个元素永远是父亲级
while True:
    for key in current_layer:
        print(key)
    choice=input(">>>:").strip()
    if len(choice)==0:continue
    if choice in current_layer:
        # parent_layer=current_layer
        parent_layer.append(current_layer)#把当前级加入父亲级称为列表最后一个元素
        #下一次循环,当输入return,就可以直接取列表最后一个值
        current_layer=current_layer[choice]
    elif choice=="b":
        # current_layer=parent_layer
        current_layer=parent_layer.pop()#取出列表最后一个值,因为他就是当前层的父亲级
    elif choice=="q":
        break
    else:
        print("no item")

 

 

自己优化借鉴写的易于理解的代码

current_layer = menu
layers = []
while True :
    for k in current_layer :
        print(k)
    choice = input (">:").strip()
    if not choice : continue
    if choice  in current_layer :
        layers.append(current_layer)
        current_layer = current_layer[choice]
    elif choice == 'b' :
        if len(layers) != 0:
            current_layer = layers.pop()
        else :
            print ("已回到最顶层")