【python入门篇——15】三级菜单详解

需求:
1.运行程序输出第一级菜单
2.选择一级菜单某项,输出二级菜单,同理输出三级菜单
3.输入出错重新选择
4.进入每一层支持返回上一级和退出
5.进入最后一层提醒

实现方法一:

# __author:"CGK"
# date: 2022/7/12

menu = {
    '浙江': {
        '杭州': {
            '余杭区': {
                '仓前街道': {},
                '五常街道': {},
                '闲林街道': {},
            },
            '滨江区': {
                '长河街道': {},
                '浦沿街道': {},
                '西兴街道': {},
            },
            '西湖区': {
                '北山街道': {},
                '古荡街道': {},
                '留下街道': {},
            },
        },
        '宁波': {
            '慈溪': {
                '庵东镇': {},
                '白沙路街道': {},
                '长河镇': {},
            },
            '北仑区': {
                '梅山街道': {},
                '小港街道': {},
                '郭巨街道': {},
            },
            '海曙区': {
                '桥洞镇': {},
                '白云街道': {},
                '古林镇': {},
            },
        },
        '金华市': {
            '东阳市': {
                '城东街道': {},
                '东阳江镇': {},
                '横店镇': {},
            },
            '兰溪市': {
                '黄店镇': {},
                '马涧镇': {},
                '灵洞乡': {},
            },
            '金东区': {
                '江东镇': {},
                '傅村镇': {},
                '岭下镇': {},
            },
        },
    },
    '北京': {
        '朝阳': {
            '安贞街道': {},
            '奥运村街道': {},
            '八里庄街道': {},
        },
        '大兴': {
            '安定镇': {},
            '子长营镇': {},
            '黄村镇': {},
        },
        '东城': {
            '安定门街道': {},
            '东花市街道': {},
            '东华门街道': {},
        },
    },
    '广东省': {
        '广州市': {
            '越秀区': {
                '白云街道': {},
                '东大街道': {},
                '东山街道': {},
                '光塔街道': {},
            },
            '天河区': {
                '长兴街道': {},
                '黄村街道': {},
                '凤凰街道': {},
                '林和街道': {},
            },
            '花都区': {
                '花东镇': {},
                '花山镇': {},
                '狮岭镇': {},
                '梯面镇': {},
            },
        },
        '佛山市': {
            '禅城区': {
                '南庄镇': {},
                '石湾镇街道': {},
                '祖庙街道': {},
            },
            '高明区': {
                '对川茶场': {},
                '明城镇': {},
                '杨和镇': {},
                '更合镇': {},
            },
            '南海区': {
                '大沥镇': {},
                '九江镇': {},
                '里水镇': {},
                '狮山镇': {},
            },
            '三水区': {
                '大塘镇': {},
                '乐平镇': {},
                '南山镇': {},
                '西南街道': {},
            },
        },
    },
}

back_flag = False
quit_flag = False

while not back_flag and not quit_flag:      # False
    for key in menu:        # 首次循环key
        print(key)      # 打印第一级菜单
    choice = input('1>>:').strip()       # 输入的是一级菜单的key
    if choice == 'q':
        quit_flag = True
        print('下次再见')
    if choice in menu:      # 判断第一层是否包含用户输入的内容
        while not back_flag and not quit_flag:        # False
            for key2 in menu[choice]:
                print(key2)
            choice2 = input('2>>:').strip()     # 输入的是二级菜单的key
            if choice2 == 'b':
                back_flag = True
            if choice2 == 'q':
                quit_flag = True
                print('下次再见')
            if choice2 in menu[choice]:     # 判断第二层是否包含用户输入的内容
                while not back_flag and not quit_flag:      # False
                    for key3 in menu[choice][choice2]:
                        print(key3)
                    choice3 = input('3>>:').strip()     # 输入的是三级菜单的key
                    if choice3 == 'b':
                        back_flag = True
                    if choice3 == 'q':
                        quit_flag = True
                        print('下次再见')
                    if choice3 in menu[choice][choice2]:        # 判断第三层是否包含用户输入的内容
                        while not back_flag and not quit_flag:      # False
                            for key4 in menu[choice][choice2][choice3]:
                                print(key4)
                            choice4 = input('最后一层,按b返回,按q退出>>:')
                            if choice4 == 'b':
                                back_flag = True
                            if choice4 == 'q':
                                quit_flag = True
                                print('下次再见')
                        else:
                            back_flag = False
                else:
                    back_flag = False
        else:
            back_flag = False


实现方法二:

menu = {
    '浙江': {
        '杭州': {
            '余杭区': {
                '仓前街道': {},
                '五常街道': {},
                '闲林街道': {},
            },
            '滨江区': {
                '长河街道': {},
                '浦沿街道': {},
                '西兴街道': {},
            },
            '西湖区': {
                '北山街道': {},
                '古荡街道': {},
                '留下街道': {},
            },
        },
        '宁波': {
            '慈溪': {
                '庵东镇': {},
                '白沙路街道': {},
                '长河镇': {},
            },
            '北仑区': {
                '梅山街道': {},
                '小港街道': {},
                '郭巨街道': {},
            },
            '海曙区': {
                '桥洞镇': {},
                '白云街道': {},
                '古林镇': {},
            },
        },
        '金华市': {
            '东阳市': {
                '城东街道': {},
                '东阳江镇': {},
                '横店镇': {},
            },
            '兰溪市': {
                '黄店镇': {},
                '马涧镇': {},
                '灵洞乡': {},
            },
            '金东区': {
                '江东镇': {},
                '傅村镇': {},
                '岭下镇': {},
            },
        },
    },
    '北京': {
        '朝阳': {
            '安贞街道': {},
            '奥运村街道': {},
            '八里庄街道': {},
        },
        '大兴': {
            '安定镇': {},
            '子长营镇': {},
            '黄村镇': {},
        },
        '东城': {
            '安定门街道': {},
            '东花市街道': {},
            '东华门街道': {},
        },
    },
    '广东省': {
        '广州市': {
            '越秀区': {
                '白云街道': {},
                '东大街道': {},
                '东山街道': {},
                '光塔街道': {},
            },
            '天河区': {
                '长兴街道': {},
                '黄村街道': {},
                '凤凰街道': {},
                '林和街道': {},
            },
            '花都区': {
                '花东镇': {},
                '花山镇': {},
                '狮岭镇': {},
                '梯面镇': {},
            },
        },
        '佛山市': {
            '禅城区': {
                '南庄镇': {},
                '石湾镇街道': {},
                '祖庙街道': {},
            },
            '高明区': {
                '对川茶场': {},
                '明城镇': {},
                '杨和镇': {},
                '更合镇': {},
            },
            '南海区': {
                '大沥镇': {},
                '九江镇': {},
                '里水镇': {},
                '狮山镇': {},
            },
            '三水区': {
                '大塘镇': {},
                '乐平镇': {},
                '南山镇': {},
                '西南街道': {},
            },
        },
    },
}

current_layer = menu        # 实现动态循环
parent_layers = []      # 用来保存所有父级,最后一个元素永远都是父亲级

while True:
    for key in current_layer:
        print(key)
    choice = input('>>:').strip()
    if len(choice) == 0: continue
    if choice in current_layer:
        # 进入下一层之前,把当前层(也就是下一层父级)追加到列表中。下一次loop,当用户选择b,就可以直接取列表的最后一个值
        parent_layers.append(current_layer)
        current_layer = current_layer[choice]       # 改成了子层
    elif choice == 'b':
        if parent_layers:
            current_layer = parent_layers.pop()     # 取出列表的最后一个值(也就是当前层的父级)
    else:
        print('内容不存在!')
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值