地區分三層結構例如:大中華地區一級劃分:華東華中華北西南特別行政區華南-------------------------------------------------請輸入你要查看的大中華地區名字:華中------------------包含的省名字二級:-----------------湖北湖南...
地區分三層結構例如:
大中華地區一級劃分:
華東
華中
華北
西南
特別行政區
華南
-------------------------------------------------
請輸入你要查看的大中華地區名字:華中
------------------包含的省名字二級:-----------------
湖北
湖南
河南
-------------------------------------------------
請輸入你要查看的省名字:湖北
--------------包含的城市名三級:-------------------
程式大概的思路和邏輯:
1 將大中華地區劃用字典列表來構造,用key取省或者地市列表,用for遍歷顯示字典或者列表的元素
2 根據整個字典的key,得到省列表,遍歷列印省的名字列表
3 設置用於跳出外迴圈的flag(跳出嵌套迴圈)
4 兩層嵌套迴圈,外迴圈for指定3次固定迴圈,3次輸入省名字錯誤,程式退出(在外迴圈for後,通過else來實現)
內迴圈while True是死迴圈,不指定次數(地市名字輸入錯誤後,會一直要求輸入,直到輸入正確為止),通過break退出內迴圈
5 通過整個字典的key得到省列表,通過省字典的key得到地市列表,遍歷列印地市的名字列表
6 判斷輸入的地市是否在省字典中,在的話,通過省字典的key,for遍歷列印城市的名字列表不在的話,提示"輸入的省名字不對,請重新輸入",continue跳出當次迭代(迴圈),繼續輸入省名字還在內迴圈while中
7 列印城市表後,2個選擇,1是退出整個程式(2個嵌套迴圈都退出),2是回到上一級別菜單(只需要退出內迴圈的當前迭代)
8 回到上一級別菜單(只退出內迴圈while) 判斷用戶輸入的是否是"b",是的話,continnue 退出內迴圈的當前迭代,開始內迴圈下次迭代
9 退出整個程式(2個嵌套迴圈都退出) 判斷用戶輸入的是否是"q",是的話,先將flag變成True,然後break退出while內迴圈
10 再做一個判斷,判斷flag是否是True,如果是的話,break退出for外迴圈,至此,退出整個程式(2個嵌套迴圈都退出)
流程圖:
代碼:
#!/user/binenv python3 # -*- coding:utf-8 -*- ''' Created on: 2015年1月16日 @author: 呂毅 Email: [email protected] Version: 1.0 ''' china_map ={ "華南":{ "廣東":["廣州市","佛山市","深圳市","東莞市"], "廣西":["南寧市","柳州市","桂林市","北海市"], "海南":["海口市","三亞市","三沙市","儋州市"] }, "華東":{ "上海":["黃浦區","盧灣區","徐匯區","長寧區","普陀區"], "安徽":["合肥市","蕪湖市","淮南市","馬鞍山市"], "江蘇":["南京市","無錫市","徐州市","常州市","蘇州市"] }, "華北":{ "北京":["東城區","西城區","朝陽區","丰台區","石景山區","海澱區"], "山西":["太原市","大同市","陽泉市","長治市"], "河北":["石家莊市","唐山市","秦皇島市","邢台市"] }, "華中":{ "湖北":["武漢市","黃石市","十堰市","十堰市"], "河南":["鄭州市","開封市","洛陽市","平頂山市"], "湖南":["長沙市","株洲市","衡陽市","邵陽市"] }, "西南":{ "重慶":["萬州區","涪陵區","渝中區","大渡口區"], "四川":["成都市","自貢市","攀枝花市","德陽市"], "貴州":["貴陽市","六盤水市","遵義市","安順市"], }, "特別行政區":{ "香港":["屯門","彎仔","北角","西貢"], "澳門":["花地瑪堂區","聖安多尼堂區","大堂區","望德堂區"], }, } print ("-------------------------------------------------") print ("+ +") print ("+ +") print ("+ 歡迎來到大中華地區查詢系統地 +") print ("+ +") print ("+ +") print ("-------------------------------------------------") print ("大中華地區一級劃分:") for i in china_map: #遍歷字典的key,列出大中華地區的名字 print (i) print ("-------------------------------------------------") jump_flag = False #用於跳出外迴圈 for i in range(3): #外迴圈,指定迴圈3次,3次外迴圈完了,就退出程式 greater_china_name = input("請輸入你要查看的大中華地區名字:") if greater_china_name in china_map: #檢查輸入的地區是否在地圖中,如果地區名字3次輸入錯誤,程式退出 gc_name = china_map[greater_china_name] province_name = gc_name.keys()#使用輸入的信息作為key,取出省信息,存在字典中 while True: #內迴圈,死迴圈,不指定迴圈次數,通過break或者flag跳出 print ("------------------包含的省名字二級:-----------------") #分隔線 for i in province_name: #遍歷列表,取出省名字,列印出來 print (i) print ("-------------------------------------------------") #分隔線 sheng_name_input = input("請輸入你要查看的省名字:") if sheng_name_input in province_name: #判斷輸入的省名字是否在地區列表中 shi_name = china_map[greater_china_name][sheng_name_input] #取出省中有哪些市,存在列表中 print ("--------------包含的城市名三級:-------------------") #分隔線 for i in shi_name: #遍歷列表,取出地區市名字,列印出來 print (i) print ("------------------------------------------------") #分隔線 if sheng_name_input not in province_name: #如果輸入的省名字不在在地區列表中 print ("輸入的省名字不對,請重新輸入") continue #跳出當次迭代,開始下一次迭代迴圈,直到地市名字輸入正確為止(不停的要求輸入) back_or_quit = input("請問是否退出?按b:Back是返回上一級菜單;按q:Exit是退出整個程式") #顯示完地區市後,就要退出程式了,一個是全部退出,一個是返回上一級菜單 if back_or_quit == "q": jump_flag = True #用於跳出外迴圈 break #跳出while內迴圈 if back_or_quit == "b": continue # 跳出當次迭代,開始下一次迭代迴圈,重新輸入省處,返回上一步 print ("你輸入的信息有誤,請重新輸入") if jump_flag: #跳出外迴圈的條件滿足 break #跳出外迴圈 else:#上面的3次for迴圈正常執行完畢,else才會執行,如果是不正常退出(break),else不會執行 print ("3次輸入錯誤,程式退出")