python 三级菜单

可依次选择进入各子菜单
可从任意一层往回退到上一层
可从任意一层退出程序
所需新知识点:列表、字典

自己想的,菜鸟版的

#!/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 ("已回到最顶层")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值