首页 > 技术文章 > python 实现三级菜单

Dreamer-qiao 2017-08-01 16:07 原文

要求:

  1. 可选择进入各级子菜单
  2. 在各级菜单下可以选择退出
  3. 在子菜单下可以返回上一级菜单

Readme:

  运行程序,输入菜单选项,进入对应的子菜单

 

# Joe Young

data = {
    '山东':{
        '济南':[
            '市中区', '天桥区', '历下区', '槐荫区', '历城区', '章丘市',
            '长清县', '平阴县', '济阳县', '商河县'
        ],
        '青岛':[
            '市南区', '市北区', '四方区', '李沧区', '黄岛区', '崂山区',
            '城阳区', '胶州市', '即墨市', '平度市', '胶南市', '莱西市'
        ],
        '枣庄':[
            '市中区', '寒亭区', '台儿庄', '峄城区', '薛城区', '滕州市'
        ],
        '东营':[
            '东营区', '河口区', '牛庄区', '利津县', '垦利县', '广饶县'
        ],
        '潍坊':[
            '潍城区', '坊子区', '寒亭区', '奎文区', '青州市', '诸城市',
            '寿光市', '安丘市', '高密市', '昌邑市', '昌乐县', '临朐县'
        ],
        '滨州':[
            '滨州市', '沾化县', '博兴县', '邹平县', '惠民县', '阳信县',
            '无棣县'
        ],
        '烟台':[
            '芝罘区', '福山区', '莱山区', '牟平区', '龙口市', '莱阳市',
            '蓬莱市', '招远市', '栖霞市', '海阳市', '莱州市', '长岛县'
        ],
        '济宁':[
            '市中区', '任城区', '曲阜市','兖州市', '邹城市', '汶上县',
            '泗水县', '微山县', '金乡县','嘉祥县', '鱼台县'
        ],
        '泰安':[
            '泰山区', '郊区', '新泰市', '肥城市', '宁阳县', '东平县'
        ],
        '威海':[
            '环翠区', '荣城市', '文登市', '乳山市'
        ],
        '日照': [
            '东港区', '五莲县', '莒县'
        ],
        '莱芜': [
            '莱城区', '钢城区'
        ],
        '临沂': [
            '兰山区', '罗庄区', '河东区', '沂南县', '沂水县', '莒南县',
            '临沭县', '郯城县', '苍山县', '费县', '平邑县', '蒙阴县'
        ],
        '菏泽': [
            '菏泽市', '鄄城县', '巨野县', '成武县', '单县', '定陶县',
            '曹县', '东明县', '郓城县'
        ],
        '聊城': [
            '东昌府区', '临清市', '高唐县', '茌平县', '东阿县', '阳谷县',
            '莘县', '冠县'
        ],
        '德州': [
            '德州区', '乐陵市', '禹城市', '陵县', '平原县', '夏津县',
            '武城县', '齐河县', '临邑县', '宁津县', '庆云县'
        ]
    },

    '北京':{
        '东城区':[
            '安定门', '建国门', '朝阳门', '东直门', '东华门'
        ],
        '西城区':[
            '西长安街', '金融街', '牛街', '广安门内', '广安门外'
        ],
        '朝阳区':[
            '南磨房', '高碑店', '将台', '太阳宫', '小红门'
        ],
        '丰台区':[
            '右安门', '太平桥', '西罗园', '大红门', '南苑'
        ],
        '石景山区':[
            '八宝山', '老山', '八角', '古城', '苹果园'
        ],
        '海淀区':[
            '万寿路', '羊坊店', '甘家口', '八里庄', '紫竹院'
        ]
    },

    '天津':{
        '西青区':{
            '西营门街道', '李七庄街道', '赤龙南街道', '赤龙北街道', '中北镇'
        },
        '和平区':{
            '劝业场街道', '小白楼街道', '五大道街道', '新兴街道', '南营门街道'
        },
        '河东区':{
            '大王庄街道', '大直沽街道', '中山门街道', '富民路街道', '二号桥街道'
        },
        '河西区':{
            '大营门街道', '下瓦房街道', '桃园街道', '挂甲寺街道', '马场街道'
        },
        '南开区':{
            '长虹街道', '鼓楼街道', '兴南街道', '广开街道', '万兴街道'
        }
    }
}


while True:
    for i in data:  # 输出一级菜单
        print(i)

    level1 = input('选择进入,或输入q退出:')

    if level1 == 'q':       # 输入'q'退出
        exit()

    if level1 not in data:  # 判断输入是否正确
        print('输入有误,请重新输入:')
        continue
    else:
        while True:
            for j in data[level1]:  # 输出二级菜单
                print('\t', j)

            level2 = input('选择进入,输入b返回上一级,输入q退出:')

            if level2 == 'q':   # 输入'q'退出
                exit()
            elif level2 == 'b': # 输入'b'返回一级菜单
                break
            else:
                if level2 not in data[level1]:  # 判断输入是否正确
                    print('输入有误,请重新输入:')
                    continue    # 输入有误,结束本次循环
                else:
                    for k in data[level1][level2]:  # 输出三级菜单
                        print('\t\t', k)

            flag = True
            while flag:
                choice = input('输入b返回上一级,输入q退出:')
                if choice == 'b':
                    flag = False
                elif choice == 'q':
                    exit()
                else:
                    continue
            else:           # 输入'b' 时,flag = False,结束 119 行的 while 循环
                continue

 

推荐阅读