day1作業二:多級菜單

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

作業二:多級菜單 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)網頁的後臺信息在資料庫中存儲的模式很好奇,是以字典形式存儲還是文本字元串形式存儲,不過猜想應該是字典的形式,文本字元串的處理方式比較麻煩。  


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

-Advertisement-
Play Games
更多相關文章
  • MySql中可視化界面如何進行自增設置? 數據類型為Int型時,可自動出現自增選項 ${pageContext.request.contextPath }是什麼? 參考:http://jzgl-javaeye.iteye.com/blog/658446 在類似下圖中使用此jsp取得絕對路徑可以避免t ...
  • 1.編寫一個程式。該程式讀取輸入直到遇到#字元,然後報告讀取的空格數目、讀取的換行符數目以及讀取的所有其他字元數目。 2.編寫一個程式。該程式讀取輸入直到遇到#字元。使程式列印每個輸入的字元以及它的十進位ASCII 碼。每行列印8 個字元/編碼對。建議:利用字元計數和模運算符(%)在每8 個迴圈周期 ...
  • C language 學習心得 附:為啥起這麼霸氣側漏,招大神們鄙視的標題,正如我在《C language》隨筆的介紹中寫的,這是一個寫個妹紙們看的C language的文章。沒錯!!寫這篇文章的靈感也來自於上周Clanguage課上偶撩到一個連書包都不放下在玩手機的妹子(普通聊天而已,噓~~~), ...
  • SpringBoot的幾個使用技巧 首先提供幾個SpringBoot開發過程中常用的網站: 1. Spring Boot官方文檔:http://docs.spring.io/spring boot/docs 2. SpringBoot項目初始化網站:https://start.spring.io/ ...
  • 1、java程式的基本結構大體上可以分為包、類、main()主方法、標識符、關鍵字、語句和註釋等。 2、標識符和關鍵字區分大小寫。 3、主方法是應用程式的入口點,java程式是從該方法開始執行的,main是主方法的名稱,程式員不可以更改。 4、標識符 是一個名字,用來標識類名、變數名、方法名、數組名 ...
  • 看了兩天《Learn Objective-C on the MAC》 中文版本《Objective-C基礎編程》,大概認真讀到了第9章記憶體管理部分,感覺這語言可比C++簡單多了。 第一天,因為有C語言基礎的緣故,我在windows 上安裝了GNUstep (Objective-C)開發環境,變看電子 ...
  • 題目描述 為了準備一個獨特的頒獎典禮,組織者在會場的一片矩形區域(可看做是平面直角坐標系的第一象限)鋪上一些矩形地毯。一共有 n 張地毯,編號從 1 到n 。現在將這些地毯按照編號從小到大的順序平行於坐標軸先後鋪設,後鋪的地毯覆蓋在前面已經鋪好的地毯之上。 地毯鋪設完成後,組織者想知道覆蓋地面某個點 ...
  • 一、任務 後臺——登錄 包含的內容:1)bootstrap驗證--登錄 2)MD5加密(加鹽)--對密碼 3)三框架頁面--主頁面 二、整體圖 三、分享 源碼、資料庫及圖片共用鏈接:http://pan.baidu.com/s/1dFIMav3 密碼:sers ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...