老男孩python学习阶段性作业- 三级菜单

作业:三级菜单

数据结构:

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

需求:
可依次选择进入各子菜单
可从任意一层往回退到上一层
可从任意一层退出程序

提交代码:

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

while True:
    for i in menu:
        print(i)
        flag_1 = 1
    choice1 = input('请输入要查询的省/市名称,按q键退出>>:').strip()
    while flag_1:
        if choice1 in menu:
            if len(menu[choice1]) == 0:
                print('无下级!')
                flag_1 = 0
            else:
                for j in menu[choice1]:
                    print(j)
                    flag_2 = 1
                choice2 = input('请输入要查询的区/县名称,按b键返回上层,按q键退出>>:').strip()
            while flag_2:
                if choice2 in menu[choice1]:
                    if len(menu[choice1][choice2]) == 0:
                        print('无下级!')
                    else:
                        for k in menu[choice1][choice2]:
                            print(k)
                    choice3 = input('是否继续查询?按任意键继续,按b键返回上层,按q键退出>>:').strip()
                    if choice3.lower() == 'q':
                        print('再见!')
                        exit()
                    elif choice3.lower() == 'b':
                        flag_1 = 1
                        break
                    else:
                        flag_1 = 0
                        flag_2 = 0
                elif choice2 == '':
                    print('输入值不可为空,请重新输入!')
                    break
                elif choice2.lower() == 'b':
                    flag_1 = 0
                    break
                elif choice2.lower() == 'q':
                    print('再见!')
                    exit()
                else:
                    print('输入值有误,请重新输入!')
                    break
        elif choice1 == '':
            print('输入值不可为空,请重新输入!')
            flag_1 = 0
        elif choice1.lower() == 'q':
            print('再见!')
            exit()
        else:
            print('输入值有误,请重新输入!')
            flag_1 = 0

参考代码:

#! /user/bin/env python
# -*- coding:utf-8 -*-
path = [{'北京': {
    '海淀': {'五道口': {'soho': {}, '网易': {}, 'google': {}}, '中关村': {'爱奇艺': {}, '汽车之家': {}, 'youku': {}}, '上地': {'百度': {}}},
    '昌平': {'沙河': {'老男孩': {}, '北航': {}}, '天通苑': {}, '回龙观': {}}, '朝阳': {}, '东城': {}},
         '上海': {'闵行': {'人民广场': {'炸鸡店': {}}}, '闸北': {'火车站': {'携程': {}}}, '浦东': {}}, '山东': {}}]
while True:
    dict_cur = path[-1]
    print(path)
    for i in dict_cur: print(i)
    msg = input(">>>").strip()
    if msg in dict_cur and len(dict_cur[msg]) > 0:
        dict_cur = dict_cur[msg]
        path.append(dict_cur)
    elif msg in dict_cur:
        print('所选项下级内容为空')
    elif msg.upper() == "B" and len(path) > 1:
        path.pop()
    elif msg.upper() == "Q":
        break
    else:
        print('非法输入')
print("再见")
原文地址:https://www.cnblogs.com/zhanglongfei/p/11640270.html