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 行,打印聯系人李四的信息
- 查詢聯系人
本小節實現查詢聯系人的功能,如下所示:
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')