python作业---实现三级菜单

字典、列表、循环、enumerate函数


  1 # -*- coding: utf-8 -*-
  2 #   Author: Jason Wang
  3 
  4 # 数据字典定义
  5 # 最底层用列表;其他各层是字典的嵌套, 共三层字典嵌套
  6 
  7 dic = \
  8     {
  9         "华南":
 10             {
 11                 "广东":
 12                     ["广州市", "佛山市", "深圳市", "东莞市"],
 13                 "广西":
 14                     ["南宁市", "柳州市", "桂林市", "北海市"],
 15                 "海南":
 16                     ["海口市", "三亚市", "三沙市", "儋州市"],
 17             },
 18         "华东":
 19             {
 20                 "上海":
 21                     ["黄浦区", "卢湾区", "徐汇区", "长宁区", "普陀区"],
 22                 "安徽":
 23                     ["合肥市", "芜湖市", "淮南市", "马鞍山市"],
 24                 "江苏":
 25                     ["南京市", "无锡市", "徐州市", "常州市", "苏州市"],
 26             },
 27         "华北":
 28             {
 29                 "北京":
 30                     ["东城区", "西城区", "朝阳区", "丰台区", "石景山区", "海淀区"],
 31                 "山西":
 32                     ["太原市", "大同市", "阳泉市", "长治市"],
 33                 "河北":
 34                     ["石家庄市", "唐山市", "秦皇岛市", "邢台市"],
 35             },
 36         "华中":
 37             {
 38                 "湖北":
 39                     ["武汉市", "黄石市", "十堰市"],
 40                 "河南":
 41                     ["郑州市", "开封市", "洛阳市", "平顶山市"],
 42                 "湖南":
 43                     ["长沙市", "株洲市", "衡阳市", "邵阳市"],
 44             },
 45         "西南":
 46             {
 47                 "重庆":
 48                     ["万州区", "涪陵区", "渝中区", "大渡口区"],
 49                 "四川":
 50                     ["成都市", "自贡市", "攀枝花市", "德阳市"],
 51                 "贵州":
 52                     ["贵阳市", "六盘水市", "遵义市", "安顺市"],
 53             },
 54         "特别行政区":
 55             {
 56                 "香港":
 57                     ["屯门", "弯仔", "北角", "西贡"],
 58                 "澳门":
 59                     ["花地玛堂区", "圣安多尼堂区", "大堂区", "望德堂区"],
 60             },
 61     }
 62 
 63 # 声明一个dic_key字典,这个字典会被循环使用并赋值,键是数字1、2、3等,值是dic字典的键,用于将用户输入和dic各层级字典联系起来
 64 
 65 dic_key = {}
 66 
 67 # 一级菜单
 68 
 69 
 70 def menu1():
 71 
 72     print('一级菜单------中国各省片区分布'.center(40, '~'))
 73     dic_key.clear()
 74 # 遍历一级菜单
 75 
 76     for index1, key1 in enumerate(dic.keys(), 1):   # enumerate第二个参数是为了指定索引起始值为1,用for循环正好是把所有键(不是值)遍历
 77 
 78         # 下面两行是最核心的两行
 79         print(index1, key1)             # enumerate函数的返回值有两个,一个数字型的索引,一个是遍历所得到的字典键,同时打印出来就得到了菜单
 80 
 81         dic_key[str(index1)] = key1    # 把遍历得到的索引进行类型转换,同时把键赋值给dic_key便于以后使用,例如dic_key[1]="华南"
 82 
 83     choose = input("请选择一级菜单(数字), 输入b返回上一级菜单, 输入退出菜单: ")
 84 
 85     if choose == 'q':
 86         quit()
 87 
 88     elif choose == 'b':
 89 
 90         print("此处为一级菜单, 不能返回")
 91 
 92     elif dic_key.get(choose):       # 如果用户的输入匹配到dic_key的键
 93 
 94         menu2(dic_key[choose])      # 则将dic_key[choose]的值传递给函数menu2作为传参
 95 
 96     else:
 97 
 98         print("输入有误, 请重新输入!!")
 99 
100 
101 def menu2(choose1):
102 
103     print('二级菜单-----省份'.center(40,  '~'))
104     dic_key.clear()
105 # 遍历二级菜单
106 
107     for index2, key2 in enumerate(dic[choose1].keys(), 1):      # 用循环将用户指定的二级字典的键遍历取出
108 
109         print(index2, key2)
110 
111         dic_key[str(index2)] = key2        # 给dic_key赋值,此时已经是二级菜单的数字和值的对应关系了
112 
113     choose2 = input("请选择二级菜单(数字), 输入b返回上一级菜单, 输入q退出菜单")
114 
115     if choose2 == 'q':
116         quit()
117 
118     elif choose2 == 'b':
119 
120         menu1()
121 
122     elif dic_key.get(choose2):
123 
124         menu3(choose1, dic_key[choose2])
125 
126     else:
127 
128         print("输入有误, 请重新输入!!")
129         menu2(choose1)
130 
131 
132 def menu3(choose1, choose2):
133 
134     print('三级菜单------地市'.center(40,  '~'))
135 #    dic_key.clear()
136 
137     for i in range(len(dic[choose1][choose2])):  # 最后一层是列表,只需要遍历列表的值,并换行显示即可,如果要按固定格式排序,将此层列表换成字典,用key排序
138 
139         print(dic[choose1][choose2][i-1])
140 
141 
142 #        dic_key[str(index3)] = key3
143 
144     choose3 = input("已经到达三级菜单, 输入b返回上一级菜单, 输入q退出菜单")
145 
146     if choose3 == 'q':
147 
148         quit()
149 
150     elif choose3 == 'b':
151 
152         menu2(choose1)
153 
154     else:
155         print("输入有误, 请重新输入")
156         menu3(choose1, choose2)
157 
158 
159 '''
160 一个python的文件有两种使用的方法, 第一是直接作为脚本执行,
161 第二是import到其他的python脚本中被调用(模块重用)执行。
162 if __name__ == 'main':  的作用就是控制这两种情况执行代码的过程,
163 在if __name__ == 'main':  下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,
164 而import到其他脚本中是不会被执行的
165 '''
166 
167 # 如果要把字典dic和dict_key的定义放在最后, 则这下面行不能被注释, 可以理解为c中的main函数
168 # if __name__ == '__main__':
169 
170 while True:
171 
172         menu1()

 

posted @ 2017-05-22 10:06  jason_dd  阅读(423)  评论(0)    收藏  举报