用python编写一个地址簿

今天在网上复习了一下python,用的是《简明Python教程》(第四版)。这是一本很好的入门级Python教材,简明扼要,查阅方便。

教材最后的作业是用python编写一个地址簿,可以实现联系人添加、打印、查阅、修改等功能,还要能把整个地址簿保存到文件、从文件读取。

这个作业基本上用到了本书中涉及的所有要点,包括面向对象编程、列表、文件IO等。

以下是我的作业,完成时间大约1小时。

```python

import pickle as p

class Contact:

    # 这是一个联系人类,包含姓名、电话、地址三个属性

    def __init__(self, name, phone, addr = ""):

        self.name = name

        self.phone = phone

        self.addr = addr

    def print(self):

        # 打印联系人

        print("Name: %s    Phone: %s    Addr: %s" % (self.name, self.phone, self.addr))

class Abook:

    # 这是一个地址簿类

    def __init__(self, filename = "C:/Users/yutuo/Documents/Python Scripts/address_book/address_book.data"):

        try:

            # 首先尝试从指定文件中读取地址簿

            f = open(filename, 'rb')

        except FileNotFoundError:

            # 如果找不到文件,则创建空的联系人列表

            self.clist = []

            return

        try:

            self.clist = p.load(f)

        except EOFError:

            # 如果文件为空,则创建空的联系人列表

            self.clist = []   

        finally:

            # 关闭文件

            f.close()


    def addContact(self, name, phone, addr = ""):

        for c in self.clist:

            # 首先查找,联系人是否已经存在

            if c.name == name:

                print("%s already exists." % name)

                return

        # 创建新的联系人实例

        newContact = Contact(name, phone, addr)

        # 将新的练习人添加到联系人列表

        self.clist.append(newContact)


    def countContact(self):

        # 打印总的联系人数

        print("I have %d contacts." % len(self.clist))


    def printContact(self, name):

        # 打印指定联系人

        for c in self.clist:

            if c.name == name:

                c.print()

                return

        print("No contact named %s found." % name)


    def printAll(self):

        # 打印所有联系人

        if len(self.clist) == 0:

            print("Zero contact.")

            return

        for c in self.clist:

            c.print()


    def editContact(self, name, phone, addr = ""):

        # 修改指定联系人信息

        for c in self.clist:

            if c.name == name:

                c.phone = phone

                c.addr = addr

                print("Contact information changed.")

                c.print()

                return           

        print("No contact named %s found." % name)


    def delContact(self, name):

        # 删除指定联系人

        for c in self.clist:

            if c.name == name:

                self.clist.remove(c)

                print("%s removed." % name)

                return

        print("No contact named %s found." % name)

    def closeBook(self, filename = "C:/Users/yutuo/Documents/Python Scripts/address_book/address_book.data"):

        # 将地址簿保存到文件,并关闭

        f = open(filename, 'wb')

        p.dump(self.clist, f)

        print("Address book closed. Saved at %s" % filename)

        f.close()

```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 网络编程 一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运...
    go以恒阅读 2,097评论 0 6
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,820评论 0 10
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,937评论 0 8
  • @贰拾贰画生 感谢简明Python教程 输入输出 输入:raw_input string = raw_input(...
    贰拾贰画生阅读 2,646评论 4 21
  • 槐花开了 香得上半个村庄 柴垛 梧桐 坯墙 墙角鸣虫 屋檐草长 你从田地里捡回时光 抽一大把岁月折断 轻盈地填进...
    蓝潭星海阅读 329评论 7 20