要求:
1、用户选择城市菜单编号显示对应的下级菜单
2、可以返回上级菜单,只有在用户确定正常退出时才退出

1 #!/usr/bin/env python3 2 # -*- coding: utf-8 -*- 3 # __author__:cjx 4 import sys 5 6 china_map = { 7 '山东': { 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 province_list = list(china_map.keys()) # 用list函数把字典的key生成列表并赋值 35 36 while True: # 最外层死循环 37 print(' 省 '.center(50, '*')) # 利用字符串类型的方法打印提示符 38 for i,p in enumerate(province_list): # 利用enumerate函数取出元素对应的索引及元素 39 print(i+1,p) # 由于列表的索引是从0开始计数的,因此要 +1 展示更好合适 40 p_id = input('请输入要查看的省名称编号,退出请输入 q:') 41 if p_id.isdigit(): 42 p_id = int(p_id) # 把输入的编号转换成int型 43 if p_id > 0 and p_id <= len(province_list): # 判断是否输入的是有效的 44 pro_name = province_list[p_id - 1] # 用用户输入的编号取出对应的城市名,索引从0开始的,因此要 -1 才是对应的值 45 city_list = list(china_map[pro_name].keys()) # 根据用户输入,获取二级菜单列表 46 while True: # 进入二级菜单死循环 47 print(' 市 '.center(50, '*')) 48 for i, c in enumerate(city_list): 49 print(i+1, c) 50 c_id = input('请输入你要查看的市名称编号,返回上一级请输入 b,退出请输入 q :') 51 if c_id.isdigit(): 52 c_id = int(c_id) 53 if 0 < c_id <= len(city_list): 54 city_name = city_list[c_id-1] 55 town_list = china_map[pro_name][city_name] 56 while True: 57 print(' 县 '.center(50, '*')) 58 for i, t in enumerate(town_list): 59 print(i+1, t) 60 b_or_q = input('已经到最后一层,返回上一级请输入 b,退出请输入 q :') 61 if b_or_q == 'b': 62 break # 跳出循环,即回到第一级循环 63 elif b_or_q == 'q': 64 exit(0) 65 else: 66 print('输入有误!') 67 else: 68 print('您输入的ID %d 不存在!' % c_id) 69 elif c_id == 'b': 70 break # 跳出循环,即回到第二级循环 71 elif c_id == 'q': 72 sys.exit('正在退出 ......') 73 else: 74 print('无效输入') 75 76 else: 77 print('您输入的ID %d 不存在!' % p_id) # 如果输入的不是正确的范围提示输入的不存在 78 elif p_id == 'q': 79 exit() 80 else: 81 print('无法识别您的输入') # 如果输入的不是可以转换成数字的字符就提示非法输入
运行效果演示:
*********************** 省 ************************
1 山东
2 江苏
3 浙江
4 安徽
5 广东
请输入要查看的省名称编号,退出请输入 q:5
*********************** 市 ************************
1 深圳
2 广州
3 东莞
请输入你要查看的市名称编号,返回上一级请输入 b,退出请输入 q :2
*********************** 县 ************************
1 天河
2 珠海
3 越秀
4 白云
5 黄埔
已经到最后一层,返回上一级请输入 b,退出请输入 q :b
*********************** 市 ************************
1 深圳
2 广州
3 东莞
请输入你要查看的市名称编号,返回上一级请输入 b,退出请输入 q :b
*********************** 省 ************************
1 山东
2 江苏
3 浙江
4 安徽
5 广东
请输入要查看的省名称编号,退出请输入 q:3
*********************** 市 ************************
1 杭州
2 宁波
3 温州
请输入你要查看的市名称编号,返回上一级请输入 b,退出请输入 q :q
正在退出 ......
原文:http://www.cnblogs.com/pyramid1001/p/5803294.html