洗禮靈魂,修煉python(78)--全棧項目實戰篇(6)—— 多級目錄菜單之地址管理系統

来源:http://www.cnblogs.com/yangva/archive/2017/12/17/8053247.html
-Advertisement-
Play Games

相信各位都在在網上買過東西吧?那麼今天我的主題就是寫個線上購物系統,是不可能的,哈哈(後期確實有這個項目),那麼購物都填寫過快遞地址吧?然後網上查個地址都有地址管理吧? 要求: 1.列印出省、市、縣等多級目錄 2.每一級可以返回到上一級,第一級不能再往上返回 3.可以隨時退出系統 分析: 1.簡單的 ...


相信各位都在在網上買過東西吧?那麼今天我的主題就是寫個線上購物系統,是不可能的,哈哈(後期確實有這個項目),那麼購物都填寫過快遞地址吧?然後網上查個地址都有地址管理吧?

 

要求:

1.列印出省、市、縣等多級目錄

2.每一級可以返回到上一級,第一級不能再往上返回

3.可以隨時退出系統

 

 

分析:

1.簡單的地址管理,那麼不必把全國的地區都寫清楚,做個簡單的範例就行,根據你常識中的地址來寫就行

2.既然是層層跌進的,那麼就有包含關係,這種包含關係怎麼搞呢?換句話用什麼數據類型存儲,我個人喜歡用字典,你們可以隨意

3.可以隨時退出系統,小問題,不用多說了

 

 

 

 

還是那句話,我希望你已經思考過在看的下麵

同樣的,代碼發佈區在github,傳送門

 

一共就一個主程式文件,這裡我暫且只用了兩個省份作為範例,設定的三級目錄,當然你可以再設定詳細的目錄。代碼:

#!usr/bin/env python
#-*- coding:utf-8 -*-

# author:yangva
# datetime:2017/12/17 0007 18:16

china_map_dict={
    '吉林':{
            '長春':{'朝陽區':{},'南關區':{},'寬城區':{},'二道區':{},'綠園區':{},'雙陽區':{},'德惠市':{},'九台市':{},'榆樹市':{},'農安縣':{}},
            '吉林市':{'船營區':{},'昌邑區':{},'龍潭區':{},'豐滿區':{},'蛟河市':{},'樺甸市':{},'舒蘭市':{},'磐石市':{},'永吉縣':{}},
            '四平':{'鐵西區':{},'鐵東區':{},'公主嶺市':{},'雙遼市':{},'梨樹縣':{},'伊通滿族自治縣':{}},
            '遼源':{'龍山區':{},'西安區':{},'東豐縣':{},'東遼縣':{}},
            '通化':{'東昌區':{},'二道江區':{},'梅河口市':{},'集安市':{},'通化縣':{},'輝南縣':{},'柳河縣':{}},
            '白山':{'渾江區':{},'江源區':{},'臨江市':{},'撫松縣':{},'靖宇縣':{},'長白北韓族自治縣':{}},
            '松原':{'寧江區':{},'長嶺縣':{},'乾安縣':{},'扶餘縣':{},'前郭爾羅斯蒙古族自治縣':{}},
            '白城':{'洮北區':{},'洮南市':{},'大安市':{},'鎮賚縣':{},'通榆縣':{}},
            '延邊州':{'延吉市':{},'圖們市':{},'敦化市':{},'和龍市':{},'琿春市':{},'龍井市':{},'汪清縣':{},'安圖縣':{}},
            '長白山管委會':{}
            },
    '四川':{
        '成都':{'錦江區':{},'青羊區':{},'金牛區':{},'武侯區':{},'成華區':{},'青白江區':{},'龍泉驛區':{},'新都區':{},'溫江區':{},'金堂縣':{},'雙流縣':{},'郫縣':{},'大邑縣':{},'蒲江縣':{},'新津縣':{},'都江堰市':{},'彭州市':{},'崇州市':{},'邛崍市':{}},
        '自貢':{'自流井區':{},'貢井區':{},'大安區':{},'灘區':{},'榮縣':{},'富順縣':{}},
        '攀枝花':{'東區':{},'西區':{},'仁和區':{},'米易縣':{},'鹽邊縣':{}},
        '瀘州':{'江陽區':{},'龍馬潭區':{},'納溪區':{},'瀘縣':{},'合江縣':{},'敘永縣':{},'古藺縣':{}},
        '德陽':{'旌陽區':{},'廣漢市':{},'什邡市':{},'綿竹市':{},'中江縣':{},'羅江縣':{}},
        '綿陽':{'涪城區':{},'游仙區':{},'梓潼縣':{},'三台縣':{},'鹽亭縣':{},'安縣':{},'平武縣':{},'江油市':{},'北川羌族自治縣':{}},
        '廣元':{'利州區':{},'昭化區':{},'朝天區':{},'旺蒼縣':{},'青川縣':{},'劍閣縣':{},'蒼溪縣':{}},
        '遂寧':{'船山區':{},'安居區':{},'射洪縣':{},'蓬溪縣':{},'大英縣':{}},
        '內江':{'市中區':{},'東興區':{},'資中縣':{},'隆昌縣':{},'威遠縣':{}},
        '樂山':{'市中區':{},'沙灣區':{},'五通橋區':{},'金口河區':{},'犍為縣':{},'井研縣':{},'夾江縣':{},'沐川縣':{},'峨眉山市':{},'峨邊彞族自治縣':{},'馬邊彞族自治縣':{}},
        '南充':{'順慶區':{},'高坪區':{},'嘉陵區':{},'西充縣':{},'南部縣':{},'蓬安縣':{},'營山縣':{},'儀隴縣':{},'閬中市':{}},
        '眉山':{'東坡區':{},'彭山區':{},'仁壽縣':{},'丹棱縣':{},'青神縣':{},'洪雅縣':{}},
        '宜賓':{'翠屏區':{},'南溪區':{},'宜賓縣':{},'江安縣':{},'長寧縣':{},'高縣':{},'筠連縣':{},'珙縣':{},'興文縣':{},'屏山縣':{}},
        '廣安':{'廣安區':{},'前鋒區':{},'鄰水縣':{},'武勝縣':{},'岳池縣':{},'華鎣市':{}},
        '達州':{'通川區':{},'達川區':{},'宣漢縣':{},'開江縣':{},'大竹縣':{},'渠縣':{},'萬源市':{}},
        '雅安':{'雨城區':{},'名山區':{},'滎經縣':{},'漢源縣':{},'石棉縣':{},'天全縣':{},'蘆山縣':{},'寶興縣':{}},
        '巴中':{'巴州區':{},'恩陽區':{},'平昌縣':{},'通江縣':{},'南江縣':{}},
        '資陽':{'雁江區':{},'安岳縣':{},'樂至縣':{},'簡陽市':{}},
        '阿壩藏族羌族自治州':{'馬爾康縣':{},'金川縣':{},'小金縣':{},'阿壩縣':{},'若爾蓋縣':{},'紅原縣':{},'壤塘縣':{},'汶川縣':{},'理縣':{},'茂縣':{},'松潘縣':{},'九寨溝縣':{},'黑水縣':{}},
        '甘孜藏族自治州':{'康定縣':{},'瀘定縣':{},'九龍縣':{},'道孚縣':{},'爐霍縣':{},'甘孜縣':{},'新龍縣':{},'德格縣':{},'白玉縣':{},'石渠縣':{},'色達縣':{},'理塘縣':{},'巴塘縣':{},'鄉城縣':{},'稻城縣':{},'得榮縣':{}},
        '涼山彞族自治州':{'西昌市':{},'德昌縣':{},'會理縣':{},'會東縣':{},'寧南縣':{},'普格縣':{},'布拖縣':{},'昭覺縣':{},'金陽縣':{},'雷波縣':{},'美姑縣':{},'甘洛縣':{},'越西縣':{},'喜德縣':{},'冕寧縣':{},'鹽源縣':{},'木里藏族自治縣':{}}
        }

}

current_leval = china_map_dict #實現動態迴圈

parent_list = [] #把所有列表父級放進列表
while True:
    for key in current_leval:
        print(key)
    choice = input('請輸入>>>:').strip()
    if len(choice) == 0:continue
    if choice in current_leval:
        parent_list.append(current_leval)
        current_leval = current_leval[choice] #進入子級
    elif choice == 'back':
        if parent_list:
            current_leval=parent_list.pop() #取出父級(上一級)
    elif choice == 'quit':
        print('程式已退出')
        break
    else:
        print('無選項【%s】'%choice)

 

很簡單,我就不演示了

 

總結:

1.上面的代碼利用了列表的pop方法,加上迴圈,最巧妙的就是重新賦值,然後while又重新迴圈下去,類似遞歸用法。

2.一樣很簡單的對吧?下一章還有多級目錄的升級版,所以不多說了,需要怎麼優化也不用多說

 

題外話:有沒有發現前面的項目和現在的項目結合起來,基本可以寫一個功能較全的程式了,具體什麼程式後面再詳解了

 


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

-Advertisement-
Play Games
更多相關文章
  • 一 python的一些語言規範 再寫腳本的時候我們會寫以上的“註釋行”先來看看它們的意思。 1:調用usr/bin/下的python解釋器去解釋執行你寫的python腳本; 2:系統會自己去找系統中的解釋器去執行; 3:告訴系統編碼方式;(下麵再講其它的編碼方式) 當然,linux系統下預設是安裝了 ...
  • Exchanger,併發工具類,線程協作,用於線程間的數據交換。 ...
  • 1. Python的集合 1.1 集合的定義 在Python中, 集合set是基本數據類型的一種集合類型,它有可變集合(set())和不可變集合(frozenset)兩種。Python中的集合set類似列表,但每個元素都必須時獨一無二的,無序的。 集合set是無序的、不重覆的,是可變的,有add() ...
  • windows下執行 scrapy 的指定的時候出現錯誤, 最初出現錯誤 提示沒有pywin32 那麼就去安裝了一個pywin32 然後pip安裝 https://www.lfd.uci.edu/~gohlke/pythonlibs/#pywin32 但是問題來了,當我安裝完對應版本的pywin32 ...
  • File類總結 File類概述 Java.io.File類 文件和目錄路徑名的抽象表示形式。 把電腦中的文件和文件夾(目錄)封裝成了一個File對象,通過File對象中的方法可以操作文件和文件夾; 是一個與系統無關的類,任意的操作系統都可以使用這個類中的方法操作文件和文件夾 3個File類有關的單詞 ...
  • 1.C++標準庫和STL C++標準庫以header files形式呈現: (1)C++標準庫的header files不帶尾碼名(.h),例如#include (2)新式C header files 不帶尾碼名.h,例如#include (3)舊式C header files (帶有尾碼名.h)仍... ...
  • 首先,找齊Spring框架中IoC功能、aop功能、JdbcTemplate功能所需的jar包,當前13個Jar包 1、Spring壓縮包中的四個核心JAR包,實現IoC控制反轉的根據xml配置文件或註解生成對象 beans 、context、core 和expression 下載地址: https ...
  • Part VII. Spring Cloud Sleuth 46. Introduction Spring Cloud Sleuth為Spring Cloud實現了分散式的跟蹤解決方案 46.1 Terminology Spring Cloud Sleuth借用了Dapper的術語 Span: 基本 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...