作業二:多級菜單 1.三級菜單 2.可以次選擇進入各子菜單 3.所需新知識點:列表、字典 4.列印b回到上一層 5.列印q退出迴圈 流程圖如下: readme: (1)存儲三級菜單的字典;設置標識符active用來迴圈; (2)生成存儲省市的字典,d1 = {1: '河南', 2: '廣東', 3: ...
作業二:多級菜單
1.三級菜單
2.可以次選擇進入各子菜單
3.所需新知識點:列表、字典
4.列印b回到上一層
5.列印q退出迴圈
流程圖如下:
readme:
(1)存儲三級菜單的字典;設置標識符active用來迴圈;
(2)生成存儲省市的字典,d1 = {1: '河南', 2: '廣東', 3: '湖南'};
(3)用戶輸入查詢編碼,如果用戶輸入q退出迴圈;如果用戶輸入小於1或大於3則重新輸入;輸入編碼在range(1,4)中,則輸出省,並繼續迴圈;
(4)生成存儲市的字典d2 = {1: '開封', 2: '洛陽', 3: '周口', 4: '南陽'};
(5)用戶輸入市編碼,如果輸入b,返回上一層迴圈;如果輸入q,退出整個迴圈;如果輸入大於4或小於1,提示輸入的編碼不對,重新讓用戶輸入;如果輸入編碼在range(1,5)中,則列印省和市並繼續迴圈;
(6)生成省和市對應的區或縣列表l1 = ['鄧州市', '鎮平縣', '西峽縣', '新野縣', '唐河縣'];
(7)讓用戶輸入市下麵區或縣的編碼,由於列表是有序的,不需要生成字典;將用戶輸入的編碼作為索引,如果用戶輸入b,則返回上一層迴圈;如果用戶輸入q退出整個迴圈;用戶輸入編碼大於或小於列表索引長度,則提示用戶重新輸入編碼;如果用戶輸入索引範圍沒有超過列表長度,則列印省、市和縣或區。
(8)結束過程。
程式如下:
#定義一個三級菜單字典 dic = {"河南":{"南陽":["鄧州市","鎮平縣","西峽縣","新野縣","唐河縣"], "洛陽":["澗西區","西工區","偃師市","孟津縣"], "周口":["川匯區","西華縣","商水縣","淮陽縣"], "開封":["龍亭區","順河區","鼓樓區","祥符區"], }, "湖南":{"長沙":["芙蓉區","岳麓區","天心區","長沙縣"], "益陽":["資陽區","赫山區","沅江市","安化縣"] }, "廣東":{"深圳":["羅湖區","福田區","寶安區","鹽田區","龍崗區"], "廣州":["天河區","越秀區","白雲區","黃埔區","番禺區"], } } active = True #設置一個標識符,用於用戶輸入"q"時退出整個迴圈 d1 = {} #設置一個空字典用來存放”省“ for index,province in enumerate(dic.keys(),1): d1[index] = province print("地區編號:%s 地區名稱:%s" %(index,province)) while active: #整個程式的迴圈,預設一直執行 num1 = input("請輸入要查詢省的編號(q為退出):") #讓用戶輸入要查詢的省的編號 if num1 == "q": #如果用戶輸入"q"則退出迴圈 active = False elif int(num1)>len(d1) or int(num1) < 1: #如果用戶輸入的數字不在編碼裡面,則提示用戶重新輸入 print("你輸入的編號不對,請重新核對後輸入") else: #如果用戶輸入正確,則列印相應的省,要使用用戶輸入的編號,因為我們對比的時候用的就是用戶輸入的編號 print(d1[int(num1)]) d2 = {} #定義一個空字典,用於存放市 for index1,city in enumerate(dic[d1[int(num1)]],1): d2[index1] = city print("城市編號:%s 城市名稱:%s" %(index1,city)) while active: #迴圈,input()函數要放在迴圈裡面,這樣迴圈的時候才能交互讓用戶一直輸入 num2 = input("請輸入你要查詢的城市編號(q為退出或b為返回上一層):") if num2 == "q": active = False elif num2 == "b": break elif int(num2)>len(d1) or int(num2) < 1: print("你輸入的查詢編號不對,請核對後重新輸入......") else: #列印省市 print(d1[int(num1)]," ",d2[int(num2)]) # while active: #while active: l1 = dic[d1[int(num1)]][d2[int(num2)]] #定義一個列表,用戶存放省市下麵的縣,是一個列表 while active: for i in range(1,len(l1)+1): print("市區編號:%s 市區名稱:%s" %(i,l1[i-1])) num3 = input("請輸入您要查詢的市區編號:") if num3 == "q": #active用來退出整個迴圈,退出程式 active = False elif num3 == 'b': #break用來退出當前存放 break elif int(num3) > len(l1) or int(num3) < 1: print("你輸入的查詢編號不對,請核對後重新輸入...") else: print(d1[int(num1)]," ",d2[int(num2)]," ",l1[int(num3)-1])
學習感悟:
(1)在這個小程式的編寫中,加強了自己對列表,字典知識的掌握;
(2)瞭解了在迴圈中,嵌套的迴圈的時候設置標識符active = True,可以用來退出整個迴圈,而每個迴圈中的break用來退出當前while迴圈,並且會返回上一層迴圈;
(3)字典的嵌套,只要掌握基礎列表,字典的常用功能,列表程式運行中得到的是什麼,本質上就是對基礎功能的使用;
(4)要經常會過頭來複習
代碼的不足之處:
(1)上面代碼字典不是有序的,我們在運行的過程中可以發現,省市的編碼順序一直在改變,嘗試使用collections中的模塊OrderedDict()字典方法沒有結果,因為OrderedDict()方法要用戶輸入鍵-值對,把用戶輸入的順序作為順序,不能直接定義一個字典d = {"k1":"v1","k2":"v2"},dic = collections.OrderedDict(d)是不可用的,生成的字典不是有序的。
(2)網頁的後臺信息在資料庫中存儲的模式很好奇,是以字典形式存儲還是文本字元串形式存儲,不過猜想應該是字典的形式,文本字元串的處理方式比較麻煩。