day1作業二:多級菜單操作

作業二:多級菜單

(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開始,這樣不符合大眾的習慣。

轉載于:https://www.cnblogs.com/gengcx/p/6940190.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395501.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395501.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395501.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JDK源碼分析(5)之 HashMap 相關

HashMap作為我們最常用的數據類型&#xff0c;當然有必要了解一下他內部是實現細節。相比于 JDK7 在JDK8 中引入了紅黑樹以及hash計算等方面的優化&#xff0c;使得 JDK8 中的HashMap效率要高于以往的所有版本&#xff0c;本文會詳細介紹相關的優化&#xff0c;但是主要還是寫 …

linux usb init,復制Linux liveUSB導致init.d腳本出錯 - 不可能..?

請發表您的想法或想出的任何想法。我很想知道別人在想什么。整體問題當我安裝一個簡單的Java應用程序(我寫的)通過/etc/init.d/在啟動(在后臺)運行時&#xff0c;它適用于我明確安裝它的liveUSB。當我制作該棒的副本時&#xff0c;它永遠不會成功啟動。在引導liveUSB副本時&…

最小費用最大流模版

#include <iostream> #include <cstring> #include <cstdio> #include <queue> #include <algorithm>using namespace std;const int MAXN10100; const int MAXM40010; const int INF0x3f3f3f3f;struct Edge      //cost代表單位流量流過該…

fpga中的slack_是否想減少部署過程的恐怖程度? 在Slack中構建ChatOps。

fpga中的slackby Rick Mak麥瑞克(Rick Mak) 是否想減少部署過程的恐怖程度&#xff1f; 在Slack中構建ChatOps。 (Want to make the deployment process less scary? Build ChatOps in Slack.) In a company that makes mobile and web products, developers shouldn’t be t…

位運算-查找數組中唯一成對的數

基礎實例一&#xff1a;使用位運算判斷數的奇偶性 實例代碼&#xff1a; public class Test {public static void main(String[] args) {System.out.println(isOdd(49));System.out.println(isOdd(50));}// 與運算public static boolean isOdd(int i){return (i & 1) ! 0;…

Docker實踐:Cannot connect to the Docker daemon.

Docker實踐&#xff1a;Cannot connect to the Docker daemon.查看docker daemon是否在運行 [rootlocalhost openec]# ps aux | grep dockerroot 3030 0.0 0.0 112656 984 pts/0 S 16:20 0:00 grep --colorauto docker啟動docker[rootlocalhost openec]# ser…

linux虛擬終端時間短,使用Screen創建虛擬終端避免Linux遠程斷線

維護Linux的ssh工具在使用中&#xff0c;一旦遇到網絡中斷&#xff0c;則當前的shell就會自動關閉當前的工作進度就會丟失&#xff0c;這對于遠程升級等比較耗費時間的工作是非常不利的對于遠程調適代碼也是很不可靠不安全的為此&#xff0c;可以使用screen這個工具來解決這個問…

中國第一軟件開發_我第一次開發企業軟件中學到的知識

中國第一軟件開發In this article, I’ll share ten lessons I learned from my first project as a self-taught software developer. I was working for a consulting company at the time, and my official title was Software Engineer. The project I worked on was a web…

react-native-Cocoapods-Swift-Project

https://reactnative.cn/docs/integration-with-existing-apps/ 1、創建一個xcode工程&#xff0c;single View就行&#xff0c;項目語言選擇swift&#xff0c;oc的直接生成就行不用這么麻煩。 2、把跟目錄上創建 node的package.json,執行命令 npm init npm install react-nati…

用shell或者python寫出各種圖形

首先是shell等邊三角形[roothxy my_script]# sh ff.sh num:6************************* *********** [roothxy my_script]# cat ff.sh #!/bin/bash ######################################################################### # File Name: ff.sh # Author: huxianyong # mai…

cfdiv2/c/找規律

題目連接 £&#xff1a;若n<4&#xff0c;NO&#xff1b; £&#xff1a;若n4,特判&#xff0c;n5&#xff0c;特判。 £&#xff1a;若n>6,用2-4組成24&#xff0c;1和5和6組成零&#xff0c;即可。 #include <set> #include <map> #includ…

linux lcd顯示流程,求助 armlinux中實現lcd顯示

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓/* for (bufIdx0; bufIdx < NUM_DISPLAY_BUFS-1; bufIdx) {fbp[bufIdx1] fbp[bufIdx] displaySize;}*/for(bufIdx0;bufIdx{buf(unsigned int *)fbp;for (i0; i < displaySize / sizeof(unsigned int); i) {buf[i] UYVY_BL…

android引入開源庫_為好目錄引入開源:通過代碼幫助公益組織

android引入開源庫by Michael D. Johnson邁克爾約翰遜(Michael D.Johnson) 為好目錄引入開源&#xff1a;通過代碼幫助公益組織 (Introducing the Open Source for Good Directory: Help Nonprofits with Code) A few months ago, we asked 20,000 people why they were learn…

第二階段站立會議08

站立會議內容&#xff1a; 大家準備繼續將代碼進行融合&#xff0c;進行測試對一些功能進行優化。 1、會議照片&#xff1a; 2、任務展板&#xff1a; 3、燃盡圖&#xff1a; 轉載于:https://www.cnblogs.com/smcoder/p/7002539.html

ionic view 視圖

ionic view 方法 $ionicView.loaded視圖已經被加載了。這事件只發生一次當視圖被創建并添加到Dom中。當跳出頁面并且被緩存了的話&#xff0c;再次訪問這個頁面時這個時間將不會被激活。Loaded事件是個好方式讓你為這個視圖設置你的代碼&#xff1b; 然而&#xff0c;他并不是…

ios開發 mvp實踐_實踐中開發人員的工作流程-我們如何在30天內建立??MVP

ios開發 mvp實踐by Lna Faure萊娜福雷(LnaFaure) 實踐中開發人員的工作流程-我們如何在30天內建立??MVP (The developer’s workflow in practice — how we built our MVP in 30 days) As a web developer, I often get to start projects from scratch and make decisions…

linux智能電壓表設計與實現,畢業論文 智能數字電壓表設計.doc

畢業論文畢業論文智能數字電壓表設計智能數字電壓表設計- PAGE I -摘要隨著微電子技術和計算機技術的迅速發展&#xff0c;特別是單片機的出現和發展&#xff0c;使傳統的電子測量儀器在原理、功能、精度及自動化水平等方面發生了巨大的變化&#xff0c;形成一種新一代的測量儀…

git——學習筆記(三)分支管理

一、創建、合并分支 每次提交&#xff0c;git都往后走一格&#xff0c;串成一跳時間線&#xff0c;head指向的是分支&#xff0c;分支指向提交。master是主分支&#xff0c;dev是另一條分支&#xff0c;分支就像指針一樣&#xff0c;合并、刪除分支時&#xff0c;修改的都是指針…

Redis 它是什么?它用來做什么?它的優勢與短板如何?

閱讀目的&#xff1a; 對什么是內存型數據庫有概念性的認知。?Redis 是什么&#xff1f; 通常而言目前的數據庫分類有幾種&#xff0c;包括 SQL/NSQL,&#xff0c;關系數據庫&#xff0c;鍵值數據庫等等 等&#xff0c;分類的標準也不以&#xff0c;Redis本質上也是一種鍵值…

阿里巴巴是如何打通 CMDB,實現就近訪問的?

CMDB在企業中&#xff0c;一般用于存放與機器設備、應用、服務等相關的元數據。當企業的機器及應用達到一定規模后就需要這樣一個系統來存儲和管理它們的元數據。有一些廣泛使用的屬性&#xff0c;例如機器的IP、主機名、機房、應用、region等&#xff0c;這些數據一般會在機器…