day1作業二:多級菜單操作

来源:http://www.cnblogs.com/gengcx/archive/2017/06/05/6940190.html
-Advertisement-
Play Games

作業二:多級菜單 (1)三級菜單 (2)可以次選擇進入各子菜單 (3)所需新知識點:列表、字典 要求:輸入back返回上一層,輸入quit退出整個程式 思路: (1)首先定義好三級菜單字典; (2)提取第一級省的編號,列印包含哪些省份,讓用戶輸入省份的編號,能夠顯示對應的省,這個過程需要創建一個字典 ...


作業二:多級菜單

(1)三級菜單

(2)可以次選擇進入各子菜單

(3)所需新知識點:列表、字典

要求:輸入back返回上一層,輸入quit退出整個程式

思路:

    (1)首先定義好三級菜單字典;

  (2)提取第一級省的編號,列印包含哪些省份,讓用戶輸入省份的編號,能夠顯示對應的省,這個過程需要創建一個字典,用於存放省原有的名稱和編號,以便用戶輸入之後進去匹配;

    (3)進入第二級菜單,市的提取,市也存放在一個字典中,以便用戶輸入對應的編號的時候能夠到字典中查找,並返回對應的市;

  (4)根據上面輸入,得到縣/區的列表,遍歷列表,並使用enumerate()給縣/區添加編號,對應的索引只需減一即可,因為不可能讓用戶看到從0開始,而列表預設是從0開始的;

流程圖如下:

    代碼如下:

 1 import collections
 2 dict_db = {"河南":[
 3     {"鄭州":["中原區","金水區","二七區","上街區","鞏義市","新鄭市","新密市","登封市","滎陽市","中牟縣"]},
 4     {"開封":["鼓樓區","龍亭區","禹王台區","金明區","開封縣","尉氏縣","蘭考縣","杞縣","通許縣"]},
 5     {"南陽":["卧龍區","宛城區","鄧州市","桐柏縣","方城縣","淅川縣","鎮平縣","唐河縣","南召縣","內鄉縣"]},
 6     {"洛陽":["西工區","老城區","澗西區","瀍河回族區","洛龍區","吉利區","偃師市","孟津縣","汝陽縣"]},
 7 
 8                   ],
 9           "湖南":[
10               {"長沙":["岳麓區","芙蓉區","天心區","開福區","雨花區","瀏陽市","長沙縣"]},
11               {"岳陽":["岳陽樓區","雲溪區","君山區","臨湘市","汨羅市","岳陽縣"]},
12               {"株洲":["天元區","荷塘區","蘆淞區","石峰區","醴陵市","株洲縣","炎陵縣"]},
13               {"湘潭":["岳塘區","雨湖區","湘鄉市","韶山市","湘潭縣"]},
14                 ],
15            "廣東":[
16                {"廣州":["越秀區","荔灣區","海珠區","天河區","白雲區","黃埔區","番禺區","花都區"]},
17                {"深圳":["福田區","羅湖區","南山區","寶安區","龍崗區","鹽田區"]},
18                {"珠海":["香洲區","斗門區","金灣區"]},
19                  ]
20            }
21 
22 if __name__ == "__main__":
23     active = True
24     #程式標識符,控製程序什麼時候停止,由於包含多層迴圈,當active=False的時候終止整個迴圈
25     #用戶輸入quit時,active=False,結束整個迴圈;用戶輸入back時,break,退出當前迴圈,跳回上一次迴圈
26     while active:
27         print("歡迎來到全國省市區查詢系統...")
28         p_dict = {}    #用戶存放編號和省份,讓用戶輸入編號的時候可以顯示身份
29         print("+---------------------------------------------------------------+")
30         for p_num,p_key in enumerate(dict_db.keys(),1):    #enumerate()添加編號
31             p_dict[p_num] = p_key
32 
33             print("省的編號:%d          省的名稱:%s" %(p_num,p_key))
34         print("+---------------------------------------------------------------+")
35         find_p = input("請輸入你要查詢的省的編號(輸入quit退出):")
36         if find_p == "quit":
37             break
38 
39         elif find_p.isdigit() and int(find_p) <= len(p_dict):
40             print("\033[32;1m%s\033[0m" %(p_dict[int(find_p)]))     #給輸出進行著色
41             province = p_dict[int(find_p)]
42             # 進入第二層迴圈
43             while active:
44                 cities = dict_db[province]
45                 cities_dict = {}      #用於存放省對應的市,讓用戶輸入編號的時候可以顯示對應的市名
46                 print("+---------------------------------------------------------------+")
47                 for c_num, city_dict in enumerate(cities, 1):
48                     for city in city_dict.keys():
49                         print("市的編號:%s        市的名稱:%s" % (c_num, city))
50                     cities_dict[c_num] = city
51                 print("+---------------------------------------------------------------+")
52                 find_city_num = input("請輸入你要查詢的市的編號(輸入quit退出,輸入back返回上一層):")
53                 if find_city_num == "quit":
54                     active = False
55                 elif find_city_num == "back":
56                     break
57                 elif find_city_num.isdigit() and int(find_city_num) <= len(cities):
58                     print("\033[22;1m%s    %s\033[0m" %(p_dict[int(find_p)], cities_dict[int(find_city_num)]))
59                     while active:
60                         #進入第三層迴圈
61                         countries = cities[int(find_city_num)-1][cities_dict[int(find_city_num)]]
62                         print("+---------------------------------------------------------------+")
63                         for country_num,country in enumerate(countries,1):
64                             print("縣/區編號:%s        縣/區名稱:%s" %(country_num,country))
65                         print("+---------------------------------------------------------------+")
66                         find_country_num = input("請輸入你要查詢的縣/區的編號(輸入quit退出,輸入back返回上一層):")
67                         if find_country_num == "quit":
68                             active = False
69                         elif find_country_num == "back":
70                             break
71                         elif find_country_num.isdigit() and int(find_country_num) <= len(countries):
72                             print("\033[1;1m%s    %s    %s\033[0m" %(p_dict[int(find_p)], cities_dict[int(find_city_num)],countries[int(find_country_num)-1]))
73                         else:
74                             print("對不起,您輸入的編號不對,請核對後重新輸入")
75                 else:
76                     print("對不起,你輸入的編號有誤,請核對後重新輸入!")
77                     active = False
78 
79 
80         else:
81             print("您輸入的編號不對,請核對後重新輸入!")

    代碼運行結果如下:

歡迎來到全國省市區查詢系統...
+---------------------------------------------------------------+
省的編號:1          省的名稱:廣東
省的編號:2          省的名稱:河南
省的編號:3          省的名稱:湖南
+---------------------------------------------------------------+
請輸入你要查詢的省的編號(輸入quit退出):2
河南
+---------------------------------------------------------------+
市的編號:1        市的名稱:鄭州
市的編號:2        市的名稱:開封
市的編號:3        市的名稱:南陽
市的編號:4        市的名稱:洛陽
+---------------------------------------------------------------+
請輸入你要查詢的市的編號(輸入quit退出,輸入back返回上一層):3
河南    南陽
+---------------------------------------------------------------+
縣/區編號:1        縣/區名稱:卧龍區
縣/區編號:2        縣/區名稱:宛城區
縣/區編號:3        縣/區名稱:鄧州市
縣/區編號:4        縣/區名稱:桐柏縣
縣/區編號:5        縣/區名稱:方城縣
縣/區編號:6        縣/區名稱:淅川縣
縣/區編號:7        縣/區名稱:鎮平縣
縣/區編號:8        縣/區名稱:唐河縣
縣/區編號:9        縣/區名稱:南召縣
縣/區編號:10       縣/區名稱:內鄉縣
+---------------------------------------------------------------+
請輸入你要查詢的縣/區的編號(輸入quit退出,輸入back返回上一層):4
河南    南陽    桐柏縣
+---------------------------------------------------------------+
縣/區編號:1        縣/區名稱:卧龍區
縣/區編號:2        縣/區名稱:宛城區
縣/區編號:3        縣/區名稱:鄧州市
縣/區編號:4        縣/區名稱:桐柏縣
縣/區編號:5        縣/區名稱:方城縣
縣/區編號:6        縣/區名稱:淅川縣
縣/區編號:7        縣/區名稱:鎮平縣
縣/區編號:8        縣/區名稱:唐河縣
縣/區編號:9        縣/區名稱:南召縣
縣/區編號:10       縣/區名稱:內鄉縣
+---------------------------------------------------------------+
請輸入你要查詢的縣/區的編號(輸入quit退出,輸入back返回上一層):back
+---------------------------------------------------------------+
市的編號:1        市的名稱:鄭州
市的編號:2        市的名稱:開封
市的編號:3        市的名稱:南陽
市的編號:4        市的名稱:洛陽
+---------------------------------------------------------------+
請輸入你要查詢的市的編號(輸入quit退出,輸入back返回上一層):2
河南    開封
+---------------------------------------------------------------+
縣/區編號:1        縣/區名稱:鼓樓區
縣/區編號:2        縣/區名稱:龍亭區
縣/區編號:3        縣/區名稱:禹王台區
縣/區編號:4        縣/區名稱:金明區
縣/區編號:5        縣/區名稱:開封縣
縣/區編號:6        縣/區名稱:尉氏縣
縣/區編號:7        縣/區名稱:蘭考縣
縣/區編號:8        縣/區名稱:杞縣
縣/區編號:9        縣/區名稱:通許縣
+---------------------------------------------------------------+
請輸入你要查詢的縣/區的編號(輸入quit退出,輸入back返回上一層):back
+---------------------------------------------------------------+
市的編號:1        市的名稱:鄭州
市的編號:2        市的名稱:開封
市的編號:3        市的名稱:南陽
市的編號:4        市的名稱:洛陽
+---------------------------------------------------------------+
請輸入你要查詢的市的編號(輸入quit退出,輸入back返回上一層):back
歡迎來到全國省市區查詢系統...
+---------------------------------------------------------------+
省的編號:1          省的名稱:廣東
省的編號:2          省的名稱:河南
省的編號:3          省的名稱:湖南
+---------------------------------------------------------------+
請輸入你要查詢的省的編號(輸入quit退出):quit

解析:

    多級菜單中要求輸入quit退出整個迴圈,輸入back返回上一層;這就啟示我們,要設置一個程式中所有迴圈的運行標識符,無論在那個環節,只要用戶輸入quit,那麼就能夠退出整個迴圈,在上述程式中,我們設置了程式運行標識符active,開始預設是True,當我們向結束程式的時候,就把中國和標識符設置為False,這樣就終止了整個程式的運行;當用戶輸入back的時候,我們只需要使用break結束當前迴圈,程式就會退出上一層迴圈,我們的目的也就達到了。

    上面的迴圈用到了層級迴圈,即如下:

  while True:

    pass

        while True:

      pass

      while True:

        pass

    在遍歷中,我們要知道我們得到的對象的屬性,是字典還是列表,還是字元串;只有這樣,我們才能使用相應的方法對應相應的操作。

    enumerate()函數用來在遍歷列表對象的元素的時候給元素添加序號,可以指定其實位置。比如商品編號不可能從0開始,這樣不符合大眾的習慣。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • . NET Core 從2016年6月28日發佈,過去了將近一年的時間,但是在工作中發現大家對.net core的接受程度並不高,這隻是一個感覺,俗話說“沒有調查就沒有發言權”, 這兩天通過微信小程式在微信群里做了一個調查,參與的人數大概230人,從結果看大家都在等待.NET Core 2.0, 期 ...
  • 淺談orm 記得四年前在學校第一次接觸到 Ling to Sql,那時候瞬間發現不用手寫sql語句是多麼的方便,後面慢慢的接觸了許多orm框架,像 EF,Dapper,Hibernate,ServiceStack.OrmLite 等。當然每種orm都有各自的優勢,也有不足的地方。園子里也有很多大神開 ...
  • python2.7的編碼格式不再是ASCII碼,直接就是UTF-8. 導入sys模塊,通過getdefaultencoding方法可以查看編碼格式。 因此,python2.7解決中文字元的編碼問題可以直接聲明編碼格式,不再通過麻煩的decode和encode進行轉換。 此處仍然需要在中文字元前加入u ...
  • 網上商城實戰3 今日任務 完成購物模塊的功能 完成訂單模塊的功能 1.1 購物模塊: 1.1.1 功能演示: 商品詳情: 購物車模塊: 1.1.2 代碼實現: 1.在商品詳情的頁面中點擊【加入購物車】鏈及. 2.提交到Servlet中: * 提交購買的商品的數量. * 提交購買的商品的ID. 3.將 ...
  • 一、後臺日期類型解析到前端 1.在springmvc的配置文件中添加這個.annotation-driven在配置文件中只配置一次 (此方法全局作用)<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springfra ...
  • 原創聲明:本文為本人原創作品,絕非他處摘取,轉載請聯繫博主 相信大家在各大網站都會遇到,登錄時,在登錄框出現下次免登陸/一個月免登陸的類似選項,本次博文就是講解如何實現,在這記錄一下,也算是做個備忘錄合集,如果文中有錯,歡迎大家指出 為啥說自登陸一次呢,因為當訪問某個頁面時,如果第一次自動登錄失敗時 ...
  • 序列標註(sequence labelling),輸入序列每一幀預測一個類別。OCR(Optical Character Recognition 光學字元識別)。 MIT口語系統研究組Rob Kassel收集,斯坦福大學人工智慧實驗室Ben Taskar預處理OCR數據集(http://ai.sta ...
  • 一開始,我得向Libuv庫和Libuv庫開發者以及相關粉絲們道一個歉,對不起,我錯怪你們了。深深感到自己的無知,是多麼羞愧的事情!! 事情的經過是這樣的。 原先按照公司要求,我在開發Windows版的TCP伺服器時,使用了Libuv庫。正是因為Libuv庫的強大,才讓我們老大推薦使用。我們老大學識淵 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...