AI 概述
1. 通讯录功能简介2. 程序框架2.1 描述单个联系人的数据结构2.2 描述所有联系人的数据结构2.3 类 AddressBook 的主要成员方法2.4 主控模块2.5 获取用户输入3. 增加联系人4. 列出联系人5. 查询联系人6. 删除联系人7. 完整的程序 还是以我们之前做过的,通讯录功能为例,本节我们继续对通讯录功能使用类...
目录
文章目录隐藏
  1. 1. 通讯录功能简介
  2. 2. 程序框架
  3. 3. 增加联系人
  4. 4. 列出联系人
  5. 5. 查询联系人
  6. 6. 删除联系人
  7. 7. 完整的程序

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

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. 获取用户输入的选择
  2. 根据用户的选择执行对应的功能
  3. 重复执行第 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. 完整的程序

class AddressBook:
    def __init__(self):
        self.persons = []

    def create_person(self):
        name = input('name: ')
        address = input('address: ')
        phone = input('phone: ')
        person = {'name': name,  'address': address, 'phone': phone}
        self.persons.append(person)

    def list_person(self):
        for person in self.persons:
            print('%s,%s,%s' % (person['name'], person['address'], person['phone']))

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

    def delete_person(self):
        name = input('name: ')
        for person in self.persons:
            if person['name'] == name:
                self.persons.remove(person)
                break                    

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

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()

以上关于06. Python 类实战演练的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 06. Python 类实战演练

发表回复