python3 實現一個多級菜單小功能


記錄下一下

 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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM