Python 基础知识(字典三级菜单)

 1 #_*_ encoding:utf-8 _*_
 2 '''
 3     Python 基础知识字典的练习:
 4         "1".生成省、市、县三级菜单,运行程序供用户选择省,后列出省对应的市,选择市列出对应的县
 5         "2".在市、县界面提供"b.返回上一级"功能
 6         "3".提供一个"e.退出"功能,用户可以随时退出
 7 '''
 8 ssx={"china":{"1":{"河北省":{"1":{"石家庄市":{"1":"高邑县","2":"无极县","3":"平山县","4":"赵县"}},
 9                            "2":{"唐山市":{"1":"滦南县","2":"迁西县","3":"唐海县","4":"玉田县"}},
10                            "3":{"秦皇岛市":{"1":"昌黎县","2":"卢龙县","3":"抚宁县","4":"青龙满族自治县"}},
11                            "4":{"邢台市":{"1":"清河县","2":"宁晋县","3":"威县","4":"隆尧县"}}
12                           }
13                 },
14              "2":{"浙江省":{"1":{"杭州市":{"1":"桐庐县","2":"淳安县","3":"建德县","4":"临安市"}},
15                           "2":{"嘉兴市":{"1":"平湖市","2":"桐乡市","3":"嘉善县","4":"海盐县"}},
16                           "3":{"绍兴市":{"1":"江山市","2":"龙游县","3":"常山县","4":"开化县"}},
17                           "4":{"宁波市":{"1":"慈溪市","2":"奉化市","3":"宁海县","4":"象山县"}}
18                           }
19                 },
20              "3":{"湖南省":{"1":{"长沙市":{"1":"长沙县","2":"望城县","3":"宁乡县","4":"浏阳市"}},
21                           "2":{"湘潭市":{"1":"雨湖区","2":"岳塘区","3":"湘乡市","4":"湘潭县"}},
22                           "3":{"衡阳市":{"1":"衡阳县","2":"衡东县","3":"衡山县","4":"衡南县"}},
23                           "4":{"岳阳市":{"1":"汨罗市","2":"岳阳县","3":"平江县","4":"华容县"}}
24                       }
25                 },
26              "4":{"山东省":{"1":{"济南市":{"1":"历下区","2":"市中区","3":"槐荫区","4":"天桥区"}},
27                           "2":{"青岛市":{"1":"市南区","2":"市北区","3":"四方区","4":"黄岛区"}},
28                           "3":{"淄博市":{"1":"张店区","2":"淄川区","3":"博山区","4":"临淄区"}},
29                           "4":{"临沂市":{"1":"苍山县","2":"平邑县","3":"莒南县","4":"蒙阴县"}}
30                       }
31                 }
32              }
33     }
34 curDict = {}
35 slt = "1"
36 level = 1
37 proName = "1"
38 proFlag = "1"
39 lastSlt = "1"
40 while(slt != "e"):
41     if(slt=="b"):
42         level-=2
43         slt = lastSlt
44         continue
45     if(level==1):
46         provinces = list(ssx["china"].keys())
47         for p in provinces:
48             print(p,".",list(ssx["china"][p].keys())[0])
49         
50         slt = input("请输入你的编号,输入b返回上一级,输入e退出:")
51         lastSlt = slt
52         level=2
53         continue
54     if(level==2):
55         curDict = ssx["china"][slt]                 #当前的字典为省
56         proFlag = slt
57         proName = list(curDict.keys())[0]
58         curDict = curDict[proName]
59         cyties = list(curDict.keys())
60         for c in cyties:
61             print(c,".",list(curDict[c].keys())[0])
62         print("b.返回上一级")
63         level = 3
64         slt = input("请输入你的编号,输入b返回上一级,输入e退出:")
65         if(slt!="b"):
66             lastSlt = slt
67             
68         continue
69     if(level==3):
70         curDict = list(ssx["china"][proFlag][proName][slt].values())[0] 
71         contres = curDict.keys()
72         for c in contres:
73             print(c,".",curDict[c])
74         print("b.返回上一级")   
75         slt = input("请输入b返回上一级,输入e退出:")
76         if(slt!="b"):
77             lastSlt = slt
78         level = 4
79         
80         continue

 

方法二:使用列表的队列的方式,将最后一次的菜单存放到队列中,在用户选择下级菜单则添加值到队列,用户选择返回上级则出对列

 

#_*_encoding:utf-8_*_
'''
    使用字典及列表相互转换的方式,供用户选择菜单中的一项并输入对应的菜单下内的内容,如果输入b,则返回上一级菜单
'''

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

exit_flag = False
current_layer = menu    #当前菜单值,用于显示
layers = []             #将用户选择的菜单依次存放在最后,当选择一次返回时,将最后一个作为当前菜单显示,再删除最后一个

while not  exit_flag:
    for k in current_layer:                     #输出当前菜单中的所有键值
        print(k)
    print("         返回(b) 退出(e)")
    choice = input(">>:").strip()               #提示用户输入,并获取输入的内容,并去掉无效空格
    if(choice == "e"):
        exit_flag = True
    if choice == "b" and len(layers)>0:
        current_layer = layers[-1]              #将用户选择返回前显示的最后一个菜单显示出来
        layers.pop()                            #将用户选择返回前显示的值从队列中删除
    elif choice not in current_layer:continue
    else:                                       #当用户选择一个菜单时,将当前显示菜单值存储到layers最后一个位置
        layers.append(current_layer)
        current_layer = current_layer[choice]   #将修改当前菜单值为用户选择的值,用于显示

 

posted on 2018-02-02 20:32  星际无垠  阅读(98)  评论(0)    收藏  举报