Python學(xué)習(xí)之模塊化程序設(shè)計(jì)示例詳解
關(guān)于模塊化程序設(shè)計(jì)
什么是模塊化程序設(shè)計(jì)?
程序設(shè)計(jì)的模塊化指的是在進(jìn)行程序設(shè)計(jì)時(shí),把一個(gè)大的程序功能劃分為若干個(gè)小的程序模塊。每一個(gè)小程序模塊實(shí)現(xiàn)一個(gè)確定的功能,并且在這些小程序模塊實(shí)現(xiàn)的功能之間建立必要的聯(lián)系,通過(guò)各個(gè)小模塊之間的互相協(xié)作完成整個(gè)大功能實(shí)現(xiàn)的方法。
模塊化設(shè)計(jì)程序的方法?
- 一般在針對(duì)實(shí)現(xiàn)比較復(fù)雜程序的情況下,采用的是自上而下的方法。將復(fù)雜的場(chǎng)景劃分為幾個(gè)部分,每一個(gè)部門(mén)再進(jìn)行針對(duì)性的細(xì)化,直到分解為比較好的解決方案為止。
- 采用模塊化設(shè)計(jì)程序,并不是一開(kāi)始就逐條的編寫(xiě)程序代碼,而是首先用主程序、子程序等框架把軟件的主要結(jié)構(gòu)和流程描述出來(lái),以功能劃分的模塊為單位進(jìn)行程序設(shè)計(jì)。
- 利用函數(shù),不僅可以實(shí)現(xiàn)程序的模塊化,使得程序設(shè)計(jì)更加簡(jiǎn)單和直觀,從而提高了程序的易讀性和可維護(hù)性,而且還可以把程序中經(jīng)常用到的一些計(jì)算或操作編寫(xiě)成通用函數(shù),以供隨時(shí)調(diào)用。
該章節(jié)模擬一個(gè)水果倉(cāng)庫(kù)管理程序。在前面章節(jié)中,程序的各項(xiàng)功能代碼全部集中在一個(gè)代碼段中,程序的結(jié)構(gòu)不清晰。該章節(jié)使用函數(shù)來(lái)實(shí)現(xiàn)程序,采用模塊化的程序設(shè)計(jì)方法:
- 劃分 水果倉(cāng)庫(kù) 程序的功能模塊,使用函數(shù)實(shí)現(xiàn)相應(yīng)的功能
- 首先實(shí)現(xiàn)整體框架,然后再細(xì)化每個(gè)功能細(xì)節(jié)
- 最終的程序由多個(gè)函數(shù)構(gòu)成,每個(gè)函數(shù)實(shí)現(xiàn)一個(gè)單一的功能,整個(gè)程序的結(jié)構(gòu)清晰
水果倉(cāng)庫(kù)功能簡(jiǎn)介
編寫(xiě)程序 fruits_warehouse 模擬 水果倉(cāng)庫(kù) 的一個(gè)簡(jiǎn)單管理系統(tǒng),水果倉(cāng)庫(kù) 包含若干水果,每種水果包括:名稱(chēng)、重量、日期 3 項(xiàng)內(nèi)容。程序提供 4 項(xiàng)基本功能:
- 添加水果: 用戶(hù)輸入水果的名稱(chēng)、重量、日期信息,將信息保存在一個(gè)列表中
- 列出當(dāng)前所有水果: 打印輸出當(dāng)前所有水果的信息
- 查詢(xún)水果: 用戶(hù)輸入水果的名稱(chēng),打印輸出該水果的信息
- 刪除水果: 用戶(hù)輸入水果的名稱(chēng),刪除該水果的信息
通過(guò)命令行界面實(shí)現(xiàn)以上功能,程序 fruits_warehouse 運(yùn)行時(shí)首先打印一個(gè)菜單,如下所示:
1: 添加水果信息 2: 顯示所有水果 3: 查詢(xún)水果信息 4: 刪除水果信息 5: 退出 請(qǐng)根據(jù)提示的數(shù)字 1-5 輸入要執(zhí)行的操作:
所以我們定義一個(gè) 獲取選項(xiàng)的函數(shù),如下:
def get_option(): print('1: 添加水果信息') print('2: 顯示所有水果') print('3: 查詢(xún)水果信息') print('4: 刪除水果信息') print('5: 退出') option = input('請(qǐng)根據(jù)提示輸入要執(zhí)行的操作: 數(shù)字 1-5 ') return option get_option() # >>> 執(zhí)行結(jié)果如下: # >>> 1: 添加水果信息 # >>> 2: 顯示所有水果 # >>> 3: 查詢(xún)水果信息 # >>> 4: 刪除水果信息 # >>> 5: 退出 # >>> 請(qǐng)根據(jù)提示的數(shù)字 1-5 輸入要執(zhí)行的操作:
主功能實(shí)現(xiàn)與程序入口
總共有 5 個(gè)選項(xiàng),用戶(hù)輸入對(duì)應(yīng)的數(shù)字選擇相應(yīng)的功能,如下表所示:
數(shù)字選項(xiàng) | 對(duì)應(yīng)功能 |
---|---|
1 : add_fruit | 添加水果信息 |
2:search_all_fruits | 列出當(dāng)前所有水果信息 |
3:query_fruit | 查詢(xún)水果信息 |
4:del_fruit | 刪除水果信息 |
5:quit | 退出 |
編寫(xiě)對(duì)應(yīng)的函數(shù),這里我們先寫(xiě)出函數(shù)的定義,暫時(shí)使用 pass 占位,代碼如下
def add_fruit(): # 添加水果信息 pass def search_all_fruits(): # 列出當(dāng)前所有水果信息 pass def query_fruit(): # 查詢(xún)水果信息 pass def del_fruit(): # 刪除水果信息 pass def main(): # 主程入口 pass
接下來(lái)我們就實(shí)現(xiàn)以下 主程入口與獲取用戶(hù)的輸入
fruits =[] # 創(chuàng)建一個(gè)空列表 fruits,fruits 記錄所有水果的信息 def get_option(): # 獲取用戶(hù)輸入 print('1: 添加水果信息') print('2: 顯示所有水果') print('3: 查詢(xún)水果信息') print('4: 刪除水果信息') print('5: 退出') option = input('請(qǐng)根據(jù)提示輸入要執(zhí)行的操作: 數(shù)字 1-5 ') return option def add_fruit(): # 添加水果信息 pass def search_all_fruits(): # 列出當(dāng)前所有水果信息 pass def query_fruit(): # 查詢(xún)水果信息 pass def del_fruit(): # 刪除水果信息 pass def main(): # 主程入口 while True: option = get_option() if option == '1': add_fruit() elif option == '2': search_all_fruits() elif option == '3': query_fruit() elif option == '4': ddel_fruit() elif option == '5': break else: print('輸入錯(cuò)誤!請(qǐng)重新輸入!') main()
實(shí)現(xiàn)添加功能
def add_fruit(): # 添加水果信息 name = input('name: ') weight = input('weight: ') date = input('date: ') fruit = {'name': name, 'weight': weight, 'date': date} fruits.append(fruit)
實(shí)現(xiàn)列出所有信息功能
def search_all_fruits(): # 列出當(dāng)前所有水果信息 if len(fruits) == 0: print('**************') print('當(dāng)前倉(cāng)庫(kù)沒(méi)有水果') print('**************') else: for fruit in fruits: print(f'%s,%s,%s' % (fruit['name'], fruit['weight'], fruit['date']))
實(shí)現(xiàn)查詢(xún)信息功能
def query_fruit(): # 查詢(xún)水果信息 name = input('name: ') if len(fruits) == 0: print('***************') print('當(dāng)前倉(cāng)庫(kù)沒(méi)有水果') print('***************') else: for fruit in fruits: if fruit['name'] == name: print(f'%s,%s,%s' % (fruit['name'], fruit['weight'], fruit['date']))
實(shí)現(xiàn)刪除信息功能
def del_fruit(): # 刪除水果信息 name = input('name: ') if len(fruits) == 0: print('***************') print('當(dāng)前倉(cāng)庫(kù)沒(méi)有水果') print('***************') else: for fruit in fruits: if fruit['name'] == name: fruits.remove(fruit) break
完整程序如下
注意:這個(gè)完整程序的功能其實(shí)并不算完整,只能說(shuō)是實(shí)現(xiàn)了一個(gè)基礎(chǔ)功能;比如一個(gè)場(chǎng)景,當(dāng)我們要查詢(xún)、刪除的水果并不在 fruits 列表 的時(shí)候,這里并沒(méi)有做校驗(yàn),只是校驗(yàn)了當(dāng)前水果列表是否存在水果(長(zhǎng)度判斷)。
所以大家可以自己動(dòng)手完善一下。
# coding:utf-8 """ @Author:Neo @Date:2020/1/14 @Filename:fruits_warehouse.py @Software:Pycharm """ fruits = [] # 創(chuàng)建一個(gè)空列表 fruits,fruits 記錄所有水果的信息 def get_option(): # 獲取用戶(hù)輸入 print('1: 添加水果信息') print('2: 顯示所有水果') print('3: 查詢(xún)水果信息') print('4: 刪除水果信息') print('5: 退出') option = input('請(qǐng)根據(jù)提示 數(shù)字 1-5 輸入要執(zhí)行的操作: ') return option def add_fruit(): # 添加水果信息 name = input('name: ') weight = input('weight: ') date = input('date: ') fruit = {'name': name, 'weight': weight, 'date': date} fruits.append(fruit) print(fruits) def search_all_fruits(): # 列出當(dāng)前所有水果信息 if len(fruits) == 0: print(' ') print('**************') print('當(dāng)前倉(cāng)庫(kù)沒(méi)有水果') print('**************') print(' ') else: for fruit in fruits: print(f'%s,%s,%s' % (fruit['name'], fruit['weight'], fruit['date'])) def query_fruit(): # 查詢(xún)水果信息 name = input('name: ') if len(fruits) == 0: print(' ') print('**************') print('當(dāng)前倉(cāng)庫(kù)沒(méi)有水果') print('**************') print(' ') else: for fruit in fruits: if fruit['name'] == name: print(f'%s,%s,%s' % (fruit['name'], fruit['weight'], fruit['date'])) def del_fruit(): # 刪除水果信息 name = input('name: ') if len(fruits) == 0: print(' ') print('**************') print('當(dāng)前倉(cāng)庫(kù)沒(méi)有水果') print('**************') print(' ') else: for fruit in fruits: if fruit['name'] == name: fruits.remove(fruit) break def main(): # 主程入口 while True: option = get_option() if option == '1': add_fruit() elif option == '2': search_all_fruits() elif option == '3': query_fruit() elif option == '4': del_fruit() elif option == '5': break else: print('輸入錯(cuò)誤!請(qǐng)重新輸入!') main()
以上就是Python學(xué)習(xí)之模塊化程序設(shè)計(jì)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Python模塊化程序設(shè)計(jì)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python控制臺(tái)中實(shí)現(xiàn)進(jìn)度條功能
這篇文章主要介紹了python控制臺(tái)中實(shí)現(xiàn)進(jìn)度條功能的方法,想要了解的朋友可以參考一下2015-11-11python中h5py開(kāi)源庫(kù)的使用樣例詳解
這篇文章主要介紹了python中的h5py開(kāi)源庫(kù)的使用,本文只是簡(jiǎn)單的對(duì)h5py庫(kù)的基本創(chuàng)建文件,數(shù)據(jù)集和讀取數(shù)據(jù)的方式進(jìn)行介紹,需要的朋友可以參考下2022-05-05跟老齊學(xué)Python之讓人歡喜讓人憂(yōu)的迭代
跟一些比較牛X的程序員交流,經(jīng)常聽(tīng)到他們嘴里冒出一個(gè)不標(biāo)準(zhǔn)的英文單詞,而loop、iterate、traversal和recursion如果不在其內(nèi),總覺(jué)得他還不夠牛X。當(dāng)讓?zhuān)嬲的絕對(duì)不會(huì)這么說(shuō)的,他們只是說(shuō)“循環(huán)、迭代、遍歷、遞歸”,然后再問(wèn)“這個(gè)你懂嗎?”。2014-10-10Tkinter canvas的畫(huà)布參數(shù),刪除組件,添加垂直滾動(dòng)條詳解
這篇文章主要介紹了python tkinter 畫(huà)布參數(shù),刪除組件,添加垂直滾動(dòng)條使用實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-10-10python中extend函數(shù)舉例詳解以及對(duì)比
Python中的extend函數(shù)是用于將一個(gè)列表的元素添加到另一個(gè)列表中,它會(huì)將第一個(gè)列表中的元素逐個(gè)添加到第二個(gè)列表的末尾,這篇文章主要給大家介紹了關(guān)于python中extend函數(shù)舉例詳解以及對(duì)比的相關(guān)資料,需要的朋友可以參考下2024-03-03關(guān)于DataFrame中某列值的替換map(dict)
這篇文章主要介紹了關(guān)于DataFrame中某列值的替換map(dict),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02