Python字典练习,三级菜单

编写省、市、县三层以上字典,实现下列要求:

1.进入到一层菜单就把下层菜单的所有子项显示出来

2.每一层都可以返回到上一层菜单中

3.每一层都可以退出程序

1》》》》方式一、多个循环完成练习

menu = {
    '北京':{
        '朝阳':{
            '国贸':{
                'CICC':{},
                'HP':{},
                '渣打银行':{},
                'CCTV':{},
            },
            '望京':{
                '陌陌':{},
                '奔驰':{},
                '360':{},
            },
            '三里屯':{
                '优衣库':{},
                'APPLE':{},
            }
        },
        '昌平':{
            "沙河":{
                "老男孩":{},
                "阿泰包子":{},
            },
            "天通苑": {
                '链家':{},
                "我爱我家":{},
            },
            "回龙观": {},
        },
        '海淀':{
            '五道口':{
                '谷歌':{},
                '网易':{},
                '搜狐':{},
                '搜狗': {},
                '快手': {},
            },
            '中关村':{
                '优酷': {},
                '爱奇艺': {},
                '汽车之家': {},
                '新东方': {},
                'QQ': {},
            },
        }
    },
    '上海':{
        '浦东':{
            '陆家嘴':{
                "CICC":{},
                '高盛': {},
                '摩根': {},
            },
            '外滩':{},
        },
        '闽兴':{},
        '静安':{},
    },
    '山东':{
        '济南':{

        },
        '德州':{
            '乐陵': {
                '老家': {},
            },
            '平原县': {},
        },
        '青岛':{},
    },
}
back_flag = False
exit_flag = False

#可以一层一层进入菜单,可以返回上一层,可以在任意层退出主菜单
while not back_flag and not exit_flag:
    for key in menu:
        print(key)
    choice = input('1>>').strip()#strip将前后的空格和换行去掉
    if choice == 'q':
        exit_flag = True
    if choice in menu:
        while not back_flag and not exit_flag:#让程序停留在第二层循环
            for key2 in menu[choice]:
                print(key2)
            choice2 = input('2>>>').strip()
            if choice2 == 'b':
                back_flag = True
            if choice2 == 'q':
                exit_flag = True
            if choice2 in menu[choice]:
                while not back_flag and not exit_flag:
                    for key3 in menu[choice][choice2]:
                        print(key3)
                    choice3 = input('3>>').strip()
                    if choice3 == 'b':
                        back_flag = True
                    if choice3 == 'q':
                        exit_flag = True
                    if choice3 in menu[choice][choice2]:
                        while not back_flag and not exit_flag:
                            for key4 in menu[choice][choice2][choice3]:
                                print(key4)
                            choice4 = input('4>>').strip()
                            if choice4 == 'b':
                                back_flag = True
                            if choice4 == 'q':
                                exit_flag = True
                        else:
                            back_flag = False
                else:
                    back_flag = False
        else:
            back_flag = False

2》》》》方式二、代码精简完成练习

# __author = 'LL'
# 2018/7/16 18:00
# PyCharm
#省略多个循环控制实现代码精简
menu = {
    '北京':{
        '朝阳':{
            '国贸':{
                'CICC':{},
                'HP':{},
                '渣打银行':{},
                'CCTV':{},
            },
            '望京':{
                '陌陌':{},
                '奔驰':{},
                '360':{},
            },
            '三里屯':{
                '优衣库':{},
                'APPLE':{},
            }
        },
        '昌平':{
            "沙河":{
                "老男孩":{},
                "阿泰包子":{},
            },
            "天通苑": {
                '链家':{},
                "我爱我家":{},
            },
            "回龙观": {},
        },
        '海淀':{
            '五道口':{
                '谷歌':{},
                '网易':{},
                '搜狐':{},
                '搜狗': {},
                '快手': {},
            },
            '中关村':{
                '优酷': {},
                '爱奇艺': {},
                '汽车之家': {},
                '新东方': {},
                'QQ': {},
            },
        }
    },
    '上海':{
        '浦东':{
            '陆家嘴':{
                "CICC":{},
                '高盛': {},
                '摩根': {},
            },
            '外滩':{},
        },
        '闽兴':{},
        '静安':{},
    },
    '山东':{
        '济南':{

        },
        '德州':{
            '乐陵': {
                '老家': {},
            },
            '平原县': {},
        },
        '青岛':{},
    },
}
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:
        parent_layers.append(current_layer)#将所有key值一层一层的放在列表中
        current_layer = current_layer[choice]
    elif choice == 'b':
        # pop(index)方法为删除并返回指定索引位置的项,不写参数,默认为删除最后一项并返回
        if parent_layers:#判断父亲层是否为空,不为空是True
            current_layer = parent_layers.pop()#取出最后一个值将该父亲层赋值给子层
    elif choice == 'q':
        break
    else:
        print('无此项,请重新输入下列选项:')

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值