python 实战 类,06 Python 类实战

Python 类实战

还是以我们之前做过的,通讯录功能为例,这节课我们继续对通讯录功能使用类进行改造:

1. 通讯录功能简介

编写程序 addressBook.py 实现通讯录管理系统,通讯录包含若干联系人,每个联系人包括:姓名、地址、电话 3 项内容。程序提供 4 项基本功能:

增加联系人: 用户输入姓名、地址、电话等信息,将信息保存在一个列表中

列出联系人: 打印输出所有联系人的信息

查询联系人: 用户输入联系人姓名,打印输出该联系人的信息

删除联系人: 用户输入联系人姓名,从通讯录中删除该联系人

通过命令行界面实现以上功能,程序 addressBook.py 运行时首先打印一个菜单,如下所示:

C:\> python addressBook.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

退出通讯录程序

2. 程序框架

2.1 描述单个联系人的数据结构

程序使用字典描述一个联系人,假设某个联系人的信息如下:

姓名

地址

电话

张三

南京

12306

使用字典描述该联系人如下:

>>> person = {'name': '张三', 'address': '南京', 'phone': '12306'}

字典有三个键:name、address、phone

对应的值分别为:张三、南京、12306

2.2 描述所有联系人的数据结构

程序将所有联系人信息存储在列表中,即通讯录是一个列表、列表的元素是字典。假设通讯录中有两个人,它们的信息如下所示:

姓名

地址

电话

张三

南京

12306

李四

王五

10086

本节使用面向对象的上设计方法实现通讯录,使用一个类 AddressBook 描述通讯录,类 AddressBook 的核心成员是一个列表,该列表保存了所有联系人, 代码如下:

class AddressBook:

def __init__(self):

self.persons = []

def addPerson(person):

self.person.append(person)

addressBook = AddressBook()

zhangSan = {'name': '张三', 'address': '南京', 'phone': '12306'}

liSi = {'name': '李四', 'address': '北京', 'phone': '10086'}

addressBook.addPerson(zhangSan)

addressBook.addPerson(lisi)

在第 1 行,定义了类 AddressBook 描述通讯录

在第 3 行,定义了成员变量 persons,它是一个列表,记录了所有的联系人

在第 5 行,定义了成员方法 addPerson,它将单个联系人加入到联系人列表中

在第 8 行,使用类 AdressBook 创建一个对象

创建两个联系人

在第 9 行,变量 zhangSan 的类型是一个字典,描述了张三的信息

在第 10 行,变量 liSi 的类型是一个字典,描述了李四的信息

将联系人添加到通讯录中

在第 11 行,将联系人 zhangSan 添加到通讯录中

在第 12 行,将联系人 liSi 添加到通讯录中

2.3 类 AddressBook 的主要成员方法

分析通讯录的功能需求,初步将程序划分为 4 个功能模块,如下表所示:

功能模块

成员方法

增加联系人

create_person

列出联系人

list_person

查询联系人

query_person

删除联系人

delete_person

使用 4 个成员方法实现相应的功能,这里先写出成员方法的定义,暂时忽略实现,代码如下:

class AddressBook:

def __init__(self):

self.persons = []

def create_person(self):

pass

def list_person(self):

pass

def query_person(self):

pass

def delete_person(self):

pass

2.4 主控模块

本节完成程序的主功能模块 main,函数 main 的功能逻辑如下:

获取用户输入的选择

根据用户的选择执行对应的功能

重复执行第 1 步的操作

函数 main 的实现代码如下:

def get_choice():

pass

def main():

addressBook = AddressBook()

while True:

choice = get_choice()

if choice == '1':

addressBook.create_person()

elif choice == '2':

addressBook.list_person()

elif choice == '3':

addressBook.query_person()

elif choice == '4':

addressBook.delete_person()

elif choice == '5':

break

else:

print('Invalid choice')

main()

在第 1 行,定义了函数 get_choice,该函数打印功能菜单并读取用户的选择

在第 4 行,定义了函数 main,该函数读取用户选择,并执行相应功能

在第 5 行,使用类 AdressBook 创建一个对象 addressBook

在第 6 行,创建一个 while 死循环

在第 7 行,使用 get_choice() 函数获取用户输入的选择

在第 9 行至第 20 行,根据 choice 执行对象 addressBook 相应的成员方法

在第 18 行,如果 choice == ‘5’,则执行 break 退出程序

2.5 获取用户输入

编写函数 get_choice 获取用户的选择,代码如下:

def get_choice():

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):')

return choice

在第 2 行到第 6 行,打印功能菜单

在第 7 行,使用 input() 函数获取用户输入的选择

在第 8 行,返回用户的选择 choice

3. 增加联系人

本小节实现增加联系人的功能,如下所示:

def create_person(self):

name = input('name: ')

address = input('address: ')

phone = input('phone: ')

person = {'name': name, 'address': address, 'phone': phone}

self.persons.append(person)

在第 1 行,定义函数 create_person,该函数实现增加联系人的功能

在第 2 行,获取用户输入的 name

在第 3 行,获取用户输入的 address

在第 4 行,获取用户输入的 phone

在第 5 行,根据用户输入的 name、address、phone 创建一个字典,用于描述该联系人

在第 6 行,将联系人加入到 self.persons 中

4. 列出联系人

本小节实现列出所有联系人的功能,如下所示:

def list_person(self):

for person in self.persons:

print('%s,%s,%s' % (person['name'], person['address'], person['phone']))

在第 1 行,定义函数 list_person,实现列出所有联系人的功能

在第 2 行,遍历列表 self.persons,循环变量 self.persons 是一个字典

在第 3 行,打印变量 person 的内容

对每个联系人打印输出一行,假设通讯录中已经存储了张三和李四两个联系人,输出如下:

C:\> python addressBook.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 行,打印联系人李四的信息

5. 查询联系人

本小节实现查询联系人的功能,如下所示:

def query_person(self):

name = input('name: ')

for person in self.persons:

if person['name'] == name:

print('%s,%s,%s' % (person['name'], person['address'], person['phone']))

在第 1 行,定义函数 query_person,实现查询联系人的功能

在第 2 行,获取用户输入的 name

在第 3 行,遍历列表 self.persons,循环变量 self.persons 是一个字典

在第 4 行,如果用户输入的 name 和循环访问 person 的 name 相同,则表示找到指定的 person

在第 5 行,打印变量 person 的内容

6. 删除联系人

本小节实现删除联系人的功能,如下所示:

def delete_person(self):

name = input('name: ')

for person in self.persons:

if person['name'] == name:

self.persons.remove(person)

break

在第 1 行,定义函数 delete_person,实现删除联系人的功能

在第 2 行,获取用户输入的 name

在第 3 行,遍历列表 self.persons,循环变量 self.persons 是一个字典

在第 4 行,如果用户输入的 name 和循环访问 person 的 name 相同,则表示找到指定的 person

在第 5 行,使用方法 self.persons.remove(person),从 self.persons 中删除元素 person

在第 6 行,退出 for 循环

7. 完整的程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值