博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python入门(四)使用Python实现简单的通讯录(1.0版本)
阅读量:4075 次
发布时间:2019-05-25

本文共 3850 字,大约阅读时间需要 12 分钟。

1.通讯录:保存联系人的信息,提供增加、删除、查询和修改联系人的功能

2.使用Python的数据结构——字典的形式来保存联系人的信息:姓名 电话 邮件 地址 生日

   通讯录中所有联系人的信息可以写入文件保存,当然也可以从文件中读取

3.只是巩固近两天学习的基本知识,程序诚然后很多不完善的地方,随着后续学习的深入,逐渐更新

import pickle  # Python的标准模块,可以将纯Python对象存储在文件中class Contact:    """ 联系人类,保存联系人的信息:包括了姓名、电话、邮件、地址和生日"""    total_amount = 0        # 类变量,用于记录当前通讯录的总人数    contacts_dict = {}      # 创建空的联系人字典,字典以键值对的形式存储信息    @classmethod    def add_contact(cls):        """添加联系人"""        name = input("请输入添加的联系人姓名:")  # input函数可以接受一个字符串作为参数,等待用户输入后将返回用户输入的文本        if name in Contact.contacts_dict:         # 运算符in来检查某一键值对是否存在于字典中            print("该联系人已经存在")        else:            telephone = input("请输入13位电话号码:")            email = input("请输入邮件:")            address = input("请输入地址:")            birthday = input("请输入生日:")            label = {"tele": telephone, "email": email, "add": address, "birth": birthday}            Contact.contacts_dict[name] = label            Contact.total_amount += 1            print("添加成功,当前已有联系人{}人".format(Contact.total_amount))    @classmethod    def delete_contact(cls):        """根据姓名删除联系人"""        name = input("请输入要删除的联系人姓名:")        if name in Contact.contacts_dict:            del Contact.contacts_dict[name]  # del语句用来删除某一键值对            print(Contact.contacts_dict)            Contact.total_amount -= 1            print("删除成功,当前已有联系人{}人".format(Contact.total_amount))        else:            print("{}人不在通讯录中".format(name))    @classmethod    def search_contact(cls):        """根据姓名搜索联系人"""        name = input("请输入要搜索的联系人姓名:")        if name in Contact.contacts_dict:            print(Contact.contacts_dict[name])        else:            print("{}人不在通讯录中".format(name))    @classmethod    def modify_contact(cls):        """修改联系人信息,注意,由于name是字典的键,所以name的值不可以修改"""        name = input("请输入要修改的联系人姓名:")        if name in Contact.contacts_dict:            print("修改前:")            print(Contact.contacts_dict[name])            modify_tele = input("请输入修改后的电话")            modify_email = input("请输入修改后的邮件")            modify_address = input("请输入修改后的地址")            modify_birth = input("请输入修改后的生日")            modify_label = {"tele": modify_tele, "email": modify_email, "add":  modify_address, "birth":  modify_birth}            Contact.contacts_dict[name] =  modify_label            print("修改后:")            print(Contact.contacts_dict[name])        else:            print("{}人不在通讯录中".format(name))    @classmethod    def write(cls):        """将通讯录写入文件"""        # 写入的方式打开文件        f = open('contact.txt', 'wb')        pickle.dump(Contact.contacts_dict, f)        # 关闭文件        f.close()    @classmethod    def read(cls):        file = 'contact.txt'        try:            # 读的方式打开文件            f = open(file, 'rb')            # 拆封            Contact.contacts_dict = pickle.load(f)            print("已经保存联系人{}位".format(len(Contact.contacts_dict)))            Contact.total_amount += len(Contact.contacts_dict)            print(Contact.contacts_dict)            # 关闭文件            f.close()        except EOFError:            print("尚未保存联系人")        except FileNotFoundError:            f.close()def contact_menu():    print("欢迎来到Leaf通讯录,系统提供以下功能:"          "1:添加"          "2:删除"          "3:修改"          "4:搜索"          "5:退出")contact_person = Contact()contact_person.read()while True:    try:        contact_menu()        choice = int(input("请选择功能:输入对应的数字"))        if choice == 1:    # 添加            contact_person.add_contact()        elif choice == 2:  # 删除            contact_person.delete_contact()        elif choice == 3:  # 修改            contact_person.modify_contact()        elif choice == 4:  # 搜索            contact_person.search_contact()        elif choice == 5:  # 退出            contact_person.write()  # 字典中数据重写写到文件中            break        else:            print("输入不合法,请重新输入")    except ValueError:        print("请输入相应的数字")

 

4.增加

5.删除

6.修改

7.搜索

你可能感兴趣的文章
Java8 Lambda表达式介绍
查看>>
Java8 stream流介绍
查看>>
Java多线程之synchronized及死锁编写
查看>>
Java NIO源码剖析及使用实例(一):Buffer
查看>>
[swift实战入门]手把手教你编写2048(一)
查看>>
[swift实战入门]手把手教你编写2048(二)
查看>>
Java 爬虫入门(网易云音乐和知乎实例)
查看>>
[swift实战入门]手把手教你编写2048(三)
查看>>
堆排序原理(图)及java版代码
查看>>
【JAVA数据结构】栈(数组实现)
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
String类的intern方法随笔
查看>>
【泛型】一个简易的对象间转换的工具类(DO转VO)
查看>>
1.随机函数,计算机运行的基石
查看>>
MouseEvent的e.stageX是Number型,可见as3作者的考虑
查看>>
在mc中直接加aswing组件,该组件还需最后用validate()方法
查看>>
移植Vim配色方案到Eclipse
查看>>
从超链接调用ActionScript
查看>>
谈谈加密和混淆吧[转]
查看>>