前言
- 參考的是慕課網提供的實戰,自己編碼
- http://www.imooc.com/wiki/pythonlesson1/function2.html
什麼是模組化程式設計
- 在進行程式設計時將一個大程式按照功能劃分為若干小程式模組
- 每個小程式模組完成一個確定的功能
- 並在這些模組之間建立必要的聯絡,通過模組的互相協作完成整個功能
自頂向下
- 在設計較複雜的程式時,一般採用自頂向下的方法,將問題劃分為幾個部分,各個部分再進行細化,直到分解為較好解決問題為止
- 採用模組化設計編寫程式時,不是一開始就逐條編寫程式程式碼
- 而是首先用主程式、子程式等框架把軟體的主要結構和流程描述出來
- 以功能塊為單位進行程式設計,實現其求解的方法稱為模組化
函式在模組化設計的作用
- 利用函式,不僅可以實現程式的模組化,使得程式設計更加簡單和直觀,從而提高了程式的易讀性和可維護性
- 而且還可以把程式中經常用到的一些計算或操作編寫成通用函式,以供隨時呼叫
實戰
功能簡介
實現一個通訊錄管理程式,使用函式來實現程式,採用模組化的程式設計方法:
- 劃分通訊錄程式的功能模組,使用函式實現相應的功能
- 首先實現整體框架,然後再細化每個功能細節
- 最終的程式由多個函式構成,每個函式實現一個單一的功能,整個程式的結構清晰
通訊錄功能簡介
通訊錄包含若干聯絡人,每個聯絡人包括:姓名、地址、電話 3 項內容。程式提供 4 項基本功能:
- 增加聯絡人: 使用者輸入姓名、地址、電話等資訊,將資訊儲存在一個列表中
- 列出聯絡人: 列印輸出所有聯絡人的資訊
- 查詢聯絡人: 使用者輸入聯絡人姓名,列印輸出該聯絡人的資訊
- 刪除聯絡人: 使用者輸入聯絡人姓名,從通訊錄中刪除該聯絡人
主程式入口
通過命令列介面實現以上功能,程式 addr-manage.py 執行時首先列印一個選單
C:\> python addr-manage.py 1. create person 2. list all persons 3. query person 4. delete person 5. quit Enter a number(1-5):
主程式包含以下功能
數字選項 | 功能描述 |
---|---|
1. create person | 增加聯絡人 |
2. list all persons | 列出聯絡人 |
3. query person | 查詢聯絡人 |
4. delete person | 刪除聯絡人 |
5. quit | 退出通訊錄程式 |
用什麼資料結構來描述一個聯絡人
- 字典最佳
- 因為聯絡人可能會有很多個屬性
- 假設聯絡人有三個屬性
姓名 | 地址 | 電話 |
---|---|---|
張三 | 南京 | 12306 |
字典表示聯絡人
{ "name": "張三", "address": "南京", "phone": "12306" }
那麼這是一個聯絡人
用什麼資料結構來描述一個通訊錄
通訊錄會有多個聯絡人,所以會有多個字典,可以通過列表來表示通訊錄
zhangSan = {'name': '張三', 'address': '南京', 'phone': '12306'} liSi = {'name': '李四', 'address': '北京', 'phone': '10086'} persons = [zhangSan, liSi]
一個函式對應一個功能
功能模組 | 對應的函式 |
---|---|
增加聯絡人 | create_person |
列出聯絡人 | list_person |
查詢聯絡人 | query_person |
刪除聯絡人 | delete_person |
主控模組 | main |
總的程式碼結構
# 通訊錄 persons = [] # 新增聯絡人 def create_person(): pass # 列出聯絡人 def list_person(): pass # 查出聯絡人 def query_person(): pass # 刪除聯絡人 def delete_person(): pass # 主函式 def main(): pass main()
主函式程式碼實現
- 獲取使用者輸入的選擇
- 根據選擇執行對應的功能
- 不斷重複第一步
# 主函式 def main(): while True: # 獲取使用者輸入 input_str = input("1. create person\n" "2. list all persons\n" "3. query person\n" "4. delete person\n" "5. quit\n" "Enter a number(1-5): " ) if input_str == "1": create_person() elif input_str == "2": list_person() elif input_str == "3": query_person() elif input_str == "4": delete_person() elif input_str == "5": break else: print("無效選擇")
新增聯絡人程式碼實現
# 新增聯絡人 def create_person(): name = input("請輸入姓名:") address = input("請輸入地址:") phone = input("請輸入手機:") if name and address and phone: person = { "name": name, "address": address, "phone": phone } persons.append(person)
列出聯絡人程式碼實現
# 列出聯絡人 def list_person(): for person in persons: print(person)
查出聯絡人程式碼實現
# 查出聯絡人 def query_person(): name = input("請輸入需要查詢的姓名:") for person in persons: if name == person["name"]: print(person)
刪除聯絡人程式碼實現
# 刪除聯絡人 def delete_person(): name = input("請輸入需要查詢的姓名:") for person in persons: if name == person["name"]: persons.remove(person)
執行效果
1. create person 2. list all persons 3. query person 4. delete person 5. quit Enter a number(1-5): 1 請輸入姓名:poloyy 請輸入地址:廣州荔灣區 請輸入手機:13501111111 1. create person 2. list all persons 3. query person 4. delete person 5. quit Enter a number(1-5): 2 {'name': 'poloyy', 'address': '廣州荔灣區', 'phone': '13501111111'} 1. create person 2. list all persons 3. query person 4. delete person 5. quit Enter a number(1-5): 3 請輸入需要查詢的姓名:poloyy {'name': 'poloyy', 'address': '廣州荔灣區', 'phone': '13501111111'} 1. create person 2. list all persons 3. query person 4. delete person 5. quit Enter a number(1-5): 4 請輸入需要查詢的姓名:poloyy 1. create person 2. list all persons 3. query person 4. delete person 5. quit Enter a number(1-5): 2 1. create person 2. list all persons 3. query person 4. delete person 5. quit Enter a number(1-5): 5 Process finished with exit code 0