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
  • 移動開發(一):使用.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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...