1. 程式人生 > Python入門教學 >18 Python 程式設計案例實踐

18 Python 程式設計案例實踐

本小節實現一個通訊錄管理程式,通過這個案例來融會貫通之前所學習的知識,該程式使用到如下知識點:

  • 條件選擇
  • 迴圈
  • 列表
  • 字典
  • 鍵盤輸入
  • 螢幕輸出

編寫程式 addr-manage.py 實現通訊錄管理系統,通訊錄包含若干聯絡人,每個聯絡人包括:姓名、地址、電話 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): 

總共有 5 個選項,使用者輸入對應的數字選擇相應的功能,如下表所示:

數字選項 功能描述
1. create person 增加聯絡人
2. list all persons 列出聯絡人
3. query person 查詢聯絡人
4. delete person 刪除聯絡人
5. quit 退出通訊錄程式

1. 程式框架

1.1 資料結構

程式使用字典描述一個聯絡人,假設某個聯絡人的資訊如下:

姓名 地址 電話
張三 南京 12306

使用字典描述該聯絡人如下:

>>> person = {'name': '張三', 'address': '南京', 'phone': '12306'}
  • 字典有三個鍵:name、address、phone
  • 對應的值分別為:張三、南京、12306

程式將所有聯絡人資訊儲存在列表中,即通訊錄是一個列表、列表的元素是字典。假設通訊錄中有兩個人,它們的資訊如下所示:

姓名 地址 電話
張三 南京 12306
李四 王五 10086

使用列表描述通訊錄如下:

>>> zhangSan = {'name': '張三', 'address': '南京', 'phone': '12306'}
>>> liSi = {'name': '李四', 'address': '北京', 'phone': '10086'}
>>> persons = [zhangSan, liSi]
  • 在第 1 行,變數 zhangSan 的型別是一個字典,描述了張三的資訊
  • 在第 2 行,變數 liSi 的型別是一個字典,描述了李四的資訊
  • 在第 3 行,persons 是一個列表,儲存了 zhangSan 和 liSi 兩個聯絡人

上面的程式碼為了易於理解,使用了 3 行程式碼描述了通訊錄。也可以使用 1 行程式碼描述該通訊錄,程式碼如下:

>>> persons = [{'name': '張三', 'address': '南京', 'phone': '12306'}, {'name': '李四', 'address': '北京', 'phone': '10086'}]

1.2 程式框架

程式框架由兩個主要部分:

  • 使用全域性變數 persons 儲存所有聯絡人的資訊
  • 使用迴圈處理程式邏輯
    • 首先列印功能選單
    • 然後獲取使用者輸入的選擇
    • 根據使用者的選擇執行對應的功能
persons = []

while True:
    print('1. create person')
    print('2. list all persons')
    print('3. query person')
    print('4. delete person')
    print('5. quit')
    choice = input('Enter a number(1-5):')   

    if choice == '1':
        pass
    elif choice == '2':
        pass
    elif choice == '3':
        pass
    elif choice == '4':
        pass
    elif choice == '5':
        pass
    else:
        print('Invalid choice')        
  • 在第 1 行,建立一個空列表 persons,persons 記錄所有聯絡人的資訊
  • 在第 3 行,建立一個 while 死迴圈
  • 在第 3 行至第 8 行,列印通訊錄功能選單
  • 在第 9 行,使用 input() 函式獲取使用者輸入的選擇
  • 在第 11 行至第 22 行,根據 choice 選擇執行相應的功能
  • 在第 12 行、第 14 行、第 16 行、第 18 行、第 20 行,在相應的功能實現處使用 pass 表示空操作,在下面的小節中將逐步填充

2. 增加聯絡人

本小節實現增加聯絡人的功能,如下所示:

if choice == '1':
    name = input('name: ')
    address = input('address: ')
    phone = input('phone: ')
    person = {'name': name,  'address': address, 'phone': phone}
    persons.append(person)
  • 在第 1 行,如果 choice == ‘1’,則執行增加聯絡人的功能
  • 在第 2 行,獲取使用者輸入的 name
  • 在第 3 行,獲取使用者輸入的 address
  • 在第 4 行,獲取使用者輸入的 phone
  • 在第 5 行,根據使用者輸入的 name、address、phone 建立一個字典,用於描述該聯絡人
  • 在第 6 行,將聯絡人加入到 persons 中

3. 列出聯絡人

本小節實現列出所有聯絡人的功能,如下所示:

elif choice == '2':
   for person in persons:
       print('%s,%s,%s' % (person['name'], person['address'], person['phone']))
  • 在第 1 行,如果 choice == ‘2’,則執行列出所有聯絡人的功能
  • 在第 2 行,遍歷列表 persons,迴圈變數 person 是一個字典
  • 在第 3 行,列印變數 person 的內容

對每個聯絡人列印輸出一行,假設通訊錄中已經儲存了張三和李四兩個聯絡人,輸出如下:

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): 2
張三,南京,12306
李四,北京,10086
  • 在第 7 行,使用者選擇執行功能 2
  • 在第 8 行,列印聯絡人張三的資訊
  • 在第 9 行,列印聯絡人李四的資訊
  1. 查詢聯絡人

本小節實現查詢聯絡人的功能,如下所示:

elif choice == '3':
    name = input('name: ')
    for person in persons:
        if person['name'] == name:
            print('%s,%s,%s' % (person['name'], person['address'], person['phone']))
  • 在第 1 行,如果 choice == ‘3’,則執行查詢聯絡人的功能
  • 在第 2 行,獲取使用者輸入的 name
  • 在第 3 行,遍歷列表 persons,迴圈變數 person 是一個字典
  • 在第 4 行,如果使用者輸入的 name 和迴圈訪問 person 的 name 相同,則表示找到指定的 person
  • 在第 5 行,列印變數 person 的內容

4. 刪除聯絡人

本小節實現刪除聯絡人的功能,如下所示:

elif choice == '4':
    name = input('name: ')
    for person in persons:
        if person['name'] == name:
            persons.remove(person)
            break
  • 在第 1 行,如果 choice == ‘4’,則執行刪除聯絡人的功能
  • 在第 2 行,獲取使用者輸入的 name
  • 在第 3 行,遍歷列表 persons,迴圈變數 person 是一個字典
  • 在第 4 行,如果使用者輸入的 name 和迴圈訪問 person 的 name 相同,則表示找到指定的 person
  • 在第 5 行,使用方法 persons.remove(person), 從 persons 中刪除元素 person
  • 在第 6 行,退出 for 迴圈

5. 退出程式

本小節實現退出程式的功能,如下所示:

 elif choice == '5':
     break
  • 在第 1 行,如果 choice == ‘5’,則執行退出程式的功能
  • 在第 2 行,執行 break 語句退出程式的主迴圈

6. 完整的程式

persons = []

while True:
    print('1. create person')
    print('2. list all persons')
    print('3. query person')
    print('4. delete person')
    print('5. quit')
    choice = input('Enter a number(1-5):')   

    if choice == '1':
        name = input('name: ')
        address = input('address: ')
        phone = input('phone: ')
        person = {'name': name,  'address': address, 'phone': phone}
        persons.append(person)
    elif choice == '2':
        for person in persons:
            print('%s,%s,%s' % (person['name'], person['address'], person['phone']))
    elif choice == '3':
        name = input('name: ')
        for person in persons:
            if person['name'] == name:
                print('%s,%s,%s' % (person['name'], person['address'], person['phone']))
    elif choice == '4':
        name = input('name: ')
        for person in persons:
            if person['name'] == name:
                persons.remove(person)
                break
    elif choice == '5':
        break
    else:
        print('Invalid choice')