Python - 函式實戰

小菠蘿測試筆記發表於2021-08-06

前言

  • 參考的是慕課網提供的實戰,自己編碼
  • 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()

 

主函式程式碼實現

  1. 獲取使用者輸入的選擇
  2. 根據選擇執行對應的功能
  3. 不斷重複第一步
# 主函式
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

 

相關文章