作業二:多級菜單 (1)三級菜單 (2)可以次選擇進入各子菜單 (3)所需新知識點:列表、字典 要求:輸入b返回上一層,輸入q退出整個程式 思路:三級菜單第一級別是省,第二級別是市,第三級別是縣,用戶可以根據內容選擇要查看的東西,因此要使用while迴圈來進行操作,要有兩層迴圈,第一層是b負責的,第 ...
作業二:多級菜單
(1)三級菜單
(2)可以次選擇進入各子菜單
(3)所需新知識點:列表、字典
要求:輸入b返回上一層,輸入q退出整個程式
思路:三級菜單第一級別是省,第二級別是市,第三級別是縣,用戶可以根據內容選擇要查看的東西,因此要使用while迴圈來進行操作,要有兩層迴圈,第一層是b負責的,第二層是q負責的,要想退出整個迴圈,輸入q結束整個大的迴圈,輸入b結束內層迴圈,跳出內層迴圈之後會繼續執行下麵的迴圈。
流程圖如下:
上面是程式大概的流程圖:
過程:
(1)首先要有一個字典,存儲三級菜單;
(2)展示一級菜單內容;
(3)用戶輸入查看的一級菜單內容;
(4)展示二級菜單內容;
(5)用戶輸入查看二級菜單內容
(6)展示三級菜單內容;
(7)用戶查看三級菜單相應內容。
代碼如下:
import collections #導入collections用於導入有序字典 dic = collections.OrderedDict() #有序字典 dic["河南"] = { "南陽":["鄧州","南召","西峽","桐柏","新野","方城","鎮平","宛城區"], "洛陽":["老城區","孟津縣","宜陽縣","伊川縣","洛寧縣","欒川縣","洛龍區"], } dic["湖南"] = { "長沙":["開福區","望城區","岳麓區","芙蓉區","寧鄉縣","天心區","星沙"], "婁底":["漣源","雙峰","冷水江市"], } dic["廣東"] = { "廣州":["越秀區","花都區","天河區","增城區"], "深圳":["羅湖區","福田區","寶安區","鹽田區","龍崗區","龍華區","坪山區"], } active = True #標識符 d1 = collections.OrderedDict() #定義一個空的字典,用戶存放一級菜單內容 d2 = collections.OrderedDict() #定義一個空的有序字典,用於存放二級菜單 d3 = [] #定義一個空的列表,用於存放三級菜單 while active: #進入一級菜單 print("省的編號 省的名稱") for index1,province in enumerate(dic.keys(),1): print(" %s %s "%(index1,province)) d1[index1] = province #把省的編號和對應的名稱放到字典中 num1 = input("請輸入你要查看省的編號:") if num1.isdigit(): #判斷用戶輸入的是否是數字化編號 if int(num1) > len(d1) or int(num1) < 1: print("對不起,你輸入的編號有誤,請重新輸入") else: print(d1[int(num1)]) else: if num1 == "q": active = False else: print("您輸入的不是數字編號,請輸入正確的數字編號!") while active: #鍵入二級菜單 print("市的編號 市的名稱") for index2,city in enumerate(dic[d1[int(num1)]].keys(),1): print(" %s %s " % (index2, city)) d2[index2] = city num2 = input("請輸入你要查看市的編號:") if num2.isdigit(): if int(num2) > len(d2) or int(num2) < 1: print("您輸入的市的編號不對,請重新輸入!") else: print(d1[int(num1)]," ",d2[int(num2)]) else: if num2 == "b": #如果用戶輸入的是b退出當前迴圈,調到上一次迴圈 break elif num2 == "q": active = False else: print("您輸入的編號有誤,請輸入正確的數字編號") while active: #進入三級菜單 print("縣區編號 縣區名稱") d3 = dic[d1[int(num1)]][d2[int(num2)]] for index3,place in enumerate(d3,1): print(" %s %s " % (index3, place)) num3 = input("請輸入你要查詢的縣/區的編號:") if num3.isdigit(): #判斷用戶輸入的字元串是否是數字格式的 if int(num3) > len(d3) or int(num3) < 1: print("您輸入的查詢編號超過範圍,請重新輸入!") else: print(d1[int(num1)], " ", d2[int(num2)]," ",d3[int(num3)-1]) else: if num3 == "b": break elif num3 == "q": active = False else: print("您輸入的查詢編號格式不對,請重新輸入!")
上面代碼中,我們有三級菜單,相應的也有三個迴圈,每個迴圈對應相應的菜單,可以在自己的迴圈中終止自己的本次迴圈和系統的所有迴圈,另外需要註意的是,我們經常使用input()輸入數字,在本例中,我們輸入字元字母"b"和字元數字,這樣的情況如果不加判斷就會造成操作,因為字元字母格式是不能夠int()的。因此我們首先判斷了用戶輸入的是否是數字。
import sys account_file = "user_file" locked_file = "lock_file" def deny_account(username): print("您的用戶已經被鎖定!") with open(locked_file,"a") as deny_f: deny_f.write("\n" + username) def main(): retry_count = 0 retry_limit = 3 while retry_count < retry_limit: username = input("\033[32:lm請輸入用戶名:\033[om") with open(locked_file,"r") as lock_f: #採用with的文件打開方式,防止忘記f.close()關閉文件 """ lines = [] for line in lock_f.readlines(): lines.append(line.strip()) if username in lines: """ for line in lock_f.readlines(): if len(line) == 0: continue if username == line.strip(): sys.exit("\033[32:lm用戶 %s 已經被鎖定!\033[0m" %username) if __name__ == "__main__": main()