做業要求及提示:三級菜單python
'''app
1.三級菜單函數
2.可依次進入各子菜單測試
3.菜單可以回到上一級編碼
4.用到知識點:字典、列表、多層循環、函數對象
條件:基本 if elseblog
嵌套 if...if...if...elseip
if elif elseutf-8
循環:while 條件:ci
.....
else:
...
continue 終止當前循環,開始下一次循環
break 終止全部循環(跳出所在while或for...)
下述示例,部分判斷中的break可變動爲continue,並刪除部分非必要for循環。
'''
流程圖
代碼示例1:
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Author : "David J" # 使用字典保存省份、市、縣列表 # 這是一個多級的字典,能夠經過for查詢每個級別的信息,級別:省份、市、區 _country_dict = { '1.河南省': { '1.鄭州市': {'1.金水區': ['區號100', '郵編400000'], '2.中原區': ['區號101', '郵編400001'], '3.二七區': ['區號102', '郵編400002']}, '2.洛陽市': {'1.老城區': ['區號200', '郵編200000'], '2.洛龍區': ['區號201', '郵編200001'], '3.西工區': ['區號203', '郵編200002']}, '3.信陽市': {'1.溮河區': ['區號300', '郵編300000'], '2.平橋區': ['區號301', '郵編300001'], '3.固始區': ['區號203', '郵編200002']} }, '2.河北省': { '1.石家莊市': {'1.長安區': ['區號400', '郵編500000'], '2.新華區': ['區號401', '郵編500001'], '3.橋西區': ['區號402', '郵編500002']}, '2.保定市': {'1.競秀區': ['區號500', '郵編600000'], '2.蓮池區': ['區號501', '郵編600001'], '3.滿城區': ['區號503', '郵編600002']}, '3.邯鄲市': {'1.叢臺區': ['區號600', '郵編700000'], '2.邯山區': ['區號601', '郵編700001'], '3.復興區': ['區號602', '郵編700002']} }, '3.湖南省': { '1.長沙市': {'1.芙蓉區': ['區號700', '郵編800000'], '2.嶽麓區': ['區號701', '郵編800001'], '3.雨花區': ['區號702', '郵編800002']}, '2.常德市': {'1.武陵區': ['區號800', '郵編900000'], '2.鼎城區': ['區號801', '郵編900001'], '3.未知區': ['區號803', '郵編900002']}, '3.湘潭市': {'1.叢臺區': ['區號900', '郵編110000'], '2.邯山區': ['區號901', '郵編110001'], '3.復興區': ['區號902', '郵編110002']} }, '4.湖北省': { '1.武漢市': {'1.江岸區': ['區號110', '郵編810000'], '2.江漢區': ['區號111', '郵編810001'], '3.漢陽區': ['區號112', '郵編810002']}, '2.宜昌市': {'1.西陵區': ['區號120', '郵編910000'], '2.點軍區': ['區號121', '郵編910001'], '3.夷陵區': ['區號123', '郵編910002']}, '3.孝感市': {'1.孝南區': ['區號130', '郵編120000'], '2.孝感區': ['區號131', '郵編120001'], '3.未知區': ['區號132', '郵編120002']} } } # 定義一個函數,用於將查詢到的省份信息傳遞給此函數 def district(): while True: # 定義一個空列表,用於保存城市信息 cy = [] city_dict = {} # %s是處理對象的一種方法,是佔位符,它的值來源於後面的% province省份的值,而後經過print打印出來 # province的值是在查詢身份的語句裏面定義的 print('%s 有如下城市:' % province) # 經過for循環將用戶選擇的省份下面的城市列表放到_city中 for _city in sorted(_country_dict[province].keys()): # 打印用戶選擇的省份下面的城市的列表 print(_city) # 將用戶選擇的省份下面的城市列表附加保存到cy列表中 city_num=_city[:1] city_dict[city_num]={"sort_num":city_num,"city_name":_city} cy.append(_city) # print(cy) # 提供交互式界面,讓用戶輸入要查詢的城市編號 _city_number = input('請輸入要查詢的城市編號:(後退:b 退出:q)') # 打印城市和區縣列表的分隔符 print('---------------------------------------------------') # 若是用戶輸入的編號是q,則退出查詢 if _city_number == 'q': print('已退出查詢!') exit() # 若是用戶輸入的是b,則中斷當前的判斷,退回到上一級省份目錄 elif _city_number == 'b': break else: # 若是用戶輸入的是正確的編號,則從cy城市列表或字典中獲取到城市信息,放到city中 # 開始一個新的循環,便於b返回 for city in _country_dict[province].keys(): # 判斷用戶輸入的城市編號和cy列表中的城市編號是否匹配 if _city_number in city_dict.keys(): # 若是匹配,則將當前城市的名稱保存到_citynumber變量中 _citynumber = city_dict[_city_number]['city_name'] # %s是處理對象的一種方法,是佔位符,它的值來源於% _citynumber具體城市的值,而後經過print打印出來 print('%s 該城市有下列區縣:' % _citynumber) # 經過while循環,將具體城市下面的區縣信息查出來 while True: # 用於保存區縣信息的列表 n = [] dist_dict = {} # 經過for循環將用戶選擇的城市下面的區縣列表放到_districts中 for _districts in sorted(_country_dict[province][_citynumber].keys()): # 打印區縣的名稱信息,例如二七區 print(_districts) dist_num=_districts[:1] dist_dict[dist_num]={"sort_num":dist_num,"dist_name":_districts} # 將區縣信息保存到n列表中 n.append(_districts) # 提供交互式界面,讓用戶輸入區縣的查詢行爲 _phone_number = input('請輸入要查詢的區縣的編號:(後退:b 退出:q)') # # 打印區縣和區縣具體信息列表的分隔符 print('---------------------------------------------------') # 若是用戶輸入了q,則結束查詢 if _phone_number == 'q': print('已結束查詢!') exit() # 若是用戶輸入了b,則返回到上一級查詢 elif _phone_number == 'b': break # 跳出當前循環,回到上一級循環 else: # 經過循環遍歷從區縣列表n中讀取區縣信息到pn中 for pn in _country_dict[province][_citynumber].keys(): # 若是用戶輸入的區縣編號和pn中的區縣編號匹配 if _phone_number in dist_dict.keys(): # 則將具體匹配到的區縣的名稱保存到phone_number中 phone_number = dist_dict[_phone_number]['dist_name'] # %s的值來源於% _phone_number具體區縣的值,而後經過print打印出來 print('%s 的信息以下:' % phone_number) # 經過for循環將用戶選擇的具體的區縣的列表中的信息放到p中 for p in _country_dict[province][_citynumber][phone_number]: # 打印具體區縣下面的郵政編碼和區號信息 print(p) # 打印查詢分隔符 print('---------------------------------------------------') # 經過交互式界面詢問用戶,是否繼續查詢 _end_get = input('查詢已完成,是否繼續其餘查詢?(繼續:Y 其餘:結束)') # 若是用戶輸入的是大寫的Y,則返回到上一級繼續查詢 if _end_get == 'Y': break # 若是用戶輸入除了大寫Y之外其餘的值,則結束查詢 else: print('已結束查詢!') exit() # 若是用戶輸入的區縣編號有誤,提示用戶從新輸入 else: print('區縣編號輸入錯誤,請從新輸入') # 第三個while True循環的退出 break # 若是用戶輸入的城市編號不對,則提示用戶從新輸入 else: print('城市編號輸入有誤,請從新輸入!') # 第二個while True不設置中斷條件,用戶能夠退回到當前的城市查詢列表中 while True: # 初始化空列表,用於保存省份信息 c = [] # country_list=[] country_dict={} # 從國家字典中取第一級列表每一行的值,循環放到_country中 for _country in sorted(_country_dict.keys()): # 逐行輸出國家字典裏第一級列表每一行的值 print (_country) ''' 打印效果 1.河南省 2.河北省 3.湖南省 4.湖北省 ''' # 將取到的第一級列表每一行的值追加放入c列表中 # country_list=_country.split('.') # country_num=country_list[0].strip() # print(country_list,country_num) #或取_country第一個字符 country_num=_country[:1] # print(country_num) # 拆分_country_dict.key()的序號,將序號1234和原key寫入新的字典country_dict,用於判斷輸入是否爲省份編號 country_dict[country_num]={"sort_num":country_num,"country_name":_country} # print(country_dict.keys()) c.append(_country) # print(c) # print(c) # c列表打印的結果['1.河南省', '2.河北省', '3.湖南省', '4.湖北省'] # 提供交互式界面給用戶輸入省份編號信息 country_number = input("請輸入要查詢的省份編號:(退出:q)") # 打印省份和城市分割線 print('---------------------------------------------------') # 若是用戶輸入的是q,則退出查詢 if country_number == 'q': print('已退出查詢!') break # 若是沒有輸入q,則有兩種狀況:1)查詢到身份列表,則把省份信息傳遞給district()函數作進一步查詢;2)提示用戶輸入的編號有錯誤 else: # 遍歷c列表中的省份信息,保存到country中 for country in _country_dict.keys(): if country_number in country_dict.keys(): # 將遍歷到的C列表的省份信息同用戶輸入的省份編號進行對比 # 若是輸入的編號和省份編號一致,則把country的值賦予給province,從而方便進一步查詢特定省份下面的城市列表 # province = country province = country_dict[country_number]['country_name'] # 若是符合上面的條件,則開始執行函數,此函數的目的是在現有查詢的基礎上進一步查詢城市和區縣信息 district() # print(country_number) # 測試用戶交互式輸入信息 break else: print("您輸入的省份編號有誤,請從新輸入!")