要求:
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