经过一周断断续续的编写,终于完成用字典表示三级菜单的工作,深入了解了while,for ,if else的用法,以及break,continue的作用。感谢老男孩免费教程。
1.作业内容:
用字典表示三级菜单,并根据输入的内容逐步显示下级菜单,最终显示输入的完整路径。
字典表示:
dic = {
"省":{
"市":{
“县”{
}
}
}
}
2.字典,列表
dic.keys()
dic.[”省”].keys()
dic.[‘省’]['市']
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #!/user/binenv python3 2 # -*- coding:utf-8 -*- 3 4 ''' 5 Created on: 2015年1月16日 6 7 @author: 吕毅 8 9 Email: 371725153@qq.com 10 11 Version: 1.0 12 13 ''' 14 15 china_map = { 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 print("-------------------------------------------------") 63 print("+ +") 64 print("+ +") 65 print("+ 欢迎来到大中华地区查询系统地 +") 66 print("+ +") 67 print("+ +") 68 print("-------------------------------------------------") 69 print("大中华地区一级划分:") 70 for i in china_map: # 遍历字典的key,列出大中华地区的名字 71 72 print(i) 73 print("-------------------------------------------------") 74 75 a = 0 76 b = 0 77 c = 0 78 79 jump_flag = False # 用于跳出外循环 80 jump_c = False 81 #for i in range(3): # 外循环,指定循环3次,3次外循环完了,就退出程序 82 while a < 3: 83 greater_china_name = input("请输入你要查看的大中华地区名字:") 84 if greater_china_name in china_map: # 检查输入的地区是否在地图中,如果地区名字3次输入错误,程序退出 85 gc_name = china_map[greater_china_name] 86 province_name = gc_name.keys() # 使用输入的信息作为key,取出省信息,存在字典中 87 88 # 内循环,死循环,不指定循环次数,通过break或者flag跳出 89 #print("------------------包含的省名字二级:-----------------") # 分隔线 90 #for i in province_name: # 遍历列表,取出省名字,打印出来 91 # print(i) 92 #print("-------------------------------------------------") # 分隔线 93 94 95 while b < 3: 96 97 print("------------------包含的省名字二级:-----------------") # 分隔线 98 for i in province_name: # 遍历列表,取出省名字,打印出来 99 print(i) 100 print("-------------------------------------------------") # 分隔线 101 102 sheng_name_input = input("请输入你要查看的省名字:") 103 104 if sheng_name_input in province_name: # 判断输入的省名字是否在地区列表中 105 shi_name = china_map[greater_china_name][sheng_name_input] # 取出省中有哪些市,存在列表中 106 107 while c < 3: 108 109 print("--------------包含的城市名三级:-------------------") # 分隔线 110 for i in shi_name: # 遍历列表,取出地区市名字,打印出来 111 print(i) 112 print("------------------------------------------------") # 分隔线 113 shi_input_name = input('请输入城市名称:') 114 if shi_input_name in china_map[greater_china_name][sheng_name_input]: 115 print ('完整的城市路径:',shi_input_name,sheng_name_input,greater_china_name) 116 c_b_q = input('继续输入请按C-继续;返回上级请按b-返回;退出程序请按q-退出:') 117 if c_b_q == 'c': 118 c = 0 119 continue 120 elif c_b_q == 'b': 121 b = 0 122 break 123 else: 124 a = 0 125 #b = 0 126 #c = 0 127 os._exit() 128 break 129 130 131 else: 132 print('输入的城市名称不正确,请重新输入:') 133 c += 1 134 break 135 136 else: 137 #jump_c = True 138 print('您输入已经超过三次,程序退出!') 139 140 break 141 142 143 if sheng_name_input not in province_name: # 如果输入的省名字不在在地区列表中 144 print("输入的省名字不对,请重新输入") 145 b += 1 146 else: 147 print('您已经输入超过三次省级名称,程序退出。') 148 break 149 #continue # 跳出当次迭代,开始下一次迭代循环,直到地市名字输入正确为止(不停的要求输入) 150 151 if jump_flag: # 跳出外循环的条件满足 152 break # 跳出外循环 153 else: # 上面的3次for循环正常执行完毕,else才会执行,如果是不正常退出(break),else不会执行 154 print("3次输入错误,程序退出")