記錄下一下
1 #!/usr/bin/env python3
2 '''
3 需求:三級菜單 4 三級菜單,依次進入子菜單 5 '''
6 City = { 7 '北京':{ 8 '大興區':[ 9 '亦庄','黃村','中信新城','B返回','Q退出'
10 ], 11 '豐台區':[ 12 '岳各庄','五棵松','豐台路口','B返回','Q退出'
13 ], 14 '朝陽區':[ 15 '勁松','雙井','國貿','B返回','Q退出'
16 ], 17 'B返回':'返回', 18 'Q退出':'退出'
19 }, 20 '上海':{ 21 '浦東區':[ 22 '世紀大道','陸家嘴','盛世年華','B返回','Q退出'
23 ], 24 '普陀區':[ 25 '東方汽配城','金沙社區','東錦國際大廈','B返回','Q退出'
26 ], 27 '徐匯區':[ 28 '上海應用技術大學','上海長途客運南站','上海東方體育中心','B返回','Q退出'
29 ], 30 'B返回': '返回', 31 'Q退出': '退出'
32 }, 33 '廣州':{ 34 '天河區':[ 35 '珠江公園','天河體育場','廣東師范大學','B返回','Q退出'
36 ], 37 '白雲區':[ 38 '廣州體育館','白雲文化廣場','廣州百信廣場','B返回','Q退出'
39 ], 40 '海珠區':[ 41 '中山大學','城市職業學院','南方醫科大學','B返回','Q退出'
42 ], 43 'B返回': '返回', 44 'Q退出': '退出'
45 } 46 } 47
48 # print(City)
49
50 Choice_of_city = list(City.keys())#字典轉換為列表
51 # print(City.keys())
52 # print(City.values())
53 #打印字典使用format函數格式化
54 # print('{0[0]} {0[1]} {0[2]}'.format(Choice_of_city))
55
56 def menu():#使用函數def
57 while True:#只要為真就無限循環
58 print('{0[0]} {0[1]} {0[2]}'.format(Choice_of_city))#將列表Choice_of_city以函數format格式化打印
59 User_input_City = input('請選擇城市:').strip()#用戶輸入,次數strip為移除空白
60 if User_input_City in Choice_of_city:#判斷用戶輸入的信息是否在列表User_input_City中
61 District = list(City[User_input_City])#獲取用戶輸入信息並根據用戶輸入信息取出字典City的values,
62 # 此處用戶輸入信息User_input_City相當於字典City的keys,並且把獲取的values轉換為列表District
63 while True:#只要為真就無限循環
64 # if User_input_City in Choice_of_city:
65 print('{0[0]} {0[1]} {0[2]} {0[3]} {0[4]}'.format(District))#將列表District以函數format格式化打印
66 User_input_District = input('請選擇區縣:').strip()#用戶輸入
67 if User_input_District not in District:#判斷用戶輸入不在於列表District中
68 print('輸入錯誤,請重新輸入!!') 69 continue#退出當前循環繼續下一次循環
70 if User_input_District in District:#判斷用戶輸入是否在列表District中
71 if User_input_District == District[3]:#判斷用戶輸入是否等於District中第4個元素
72 break#跳出當前循環
73 elif User_input_District == District[4]:#判斷用戶輸入是否等於District中第4個元素
74 return#退出整個函數,這里用來退出所有循環
75 else: 76 while True: 77 Township = (City[User_input_City][User_input_District]) 78 print('{0[0]} {0[1]} {0[2]} {0[3]} {0[4]}'.format(Township)) 79 User_input_township = input('選擇鄉鎮:').strip() 80 if User_input_township not in Township: 81 print('輸入錯誤,請重新輸入!!') 82 continue
83 if User_input_township in Township: 84 if User_input_township == Township[3]: 85 break
86 if User_input_township == Township[4]: 87 return
88 else: 89 print('Bingo!!!') 90 return
91 else: 92 continue
93 else: 94 break
95 else: 96 continue
97 else: 98 print('輸入錯誤,請重新輸入!!') 99 continue
100 # else:
101 # continue
102 # else:
103 # print('輸入不正確,請重新輸入!!')
104 menu()
另外在寫了一個版本:
1 #!/usr/bin/env python3
2 City = { 3 '北京市':{ 4 '大興區':[ 5 '亦庄','黃村','中信新城','返回','退出'
6 ], 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 '廣州體育館','白雲文化廣場','廣州百信廣場','返回','退出'
35 ], 36 '海珠區':[ 37 '中山大學','城市職業學院','南方醫科大學','返回','退出'
38 ], 39 '返回': '返回', 40 '退出': '退出'
41 } 42 } 43 dic_city = {} 44 dic_district = {} 45 dic_address = {} 46 def menu(): 47 while True: 48 for i in enumerate(City, 1): #循環字典City,並在keys前加序號
49 print(i[0], i[1]) #循環打印序號+City的keys
50 dic_city[str(i[0])] = i[1] #將打印的序號和字典City的keys循環加入新的字典dic_city中,此處str將序號轉換為字符串,方便后面判斷
51 user_input = input('選擇前往城市編號:').strip() #用戶輸入,strip去掉兩側空格
52 # print(dic_city)
53 if len(user_input) == 0: #計算用戶輸入長度是否為0,判斷輸入是不是空值
54 print('輸入不能為空,請重新輸入!') 55 continue #退出本次循環
56 elif user_input in dic_city: #判斷用戶輸入是否在字典dic_city中
57 while True: 58 for i in enumerate((City[dic_city[user_input]]),1):#循環中添加序號
59 print(i[0],i[1]) 60 dic_district[str(i[0])] = i[1] 61 district = input('區縣選擇或退出返回(請填寫序號即可):').strip() 62 if len(district) == 0: #計算用戶輸入長度是否為0,判斷輸入是不是空值
63 print('輸入不能為空,請重新輸入!') 64 continue
65 elif district == list(dic_district)[-2]: #判斷用戶輸入是否等於倒數第二個元素,即:返回
66 break
67 elif district == list(dic_district)[-1]: #判斷用戶輸入是否等於最后一個元素,即:退出
68 return #退出整個函數,這里用來退出多層循環
69 elif district not in dic_district: #判斷用戶輸入不在字典dic_district中
70 print('輸入不正確,請重新輸入!') 71 continue
72 else: 73 while True: 74 for i in enumerate((City[dic_city[user_input]][dic_district[district]]),1):#多層字典,最外層字典City,
75 # [dic_city[user_input]新字典中取到City的keys,這樣取到第二層字典;dic_district[district]新字典中取到
76 # 第二層字典的keys,City[dic_city[user_input]][dic_district[district]]整個是第二層字典加keys,最后取
77 # 出第三層
78 print(i[0],i[1]) 79 dic_address[str(i[0])] = i[1] 80 address = input('選擇地址或者返回退出(請填寫序號即可):').strip() 81 if len(address) == 0: 82 print('輸入不能為空,請重新輸入!') 83 continue
84 elif address == list(dic_address)[-2]: 85 break
86 elif address == list(dic_address)[-1]: 87 return
88 elif address not in dic_address: 89 print('輸入不正確,請重新輸入!') 90 continue
91 else: 92 addr = '''
93 您選擇的地址為:%s%s%s 94 '''%(dic_city[user_input],dic_district[district],dic_address[address])#段落輸出格式,%s代替字符串
95 print(addr.strip()) 96 return
97 continue
98 break
99 continue
100 else: 101 print('輸入不正確,請重新輸入!') 102 continue
103 menu()