面向对象实现电话簿

"""
使用面型对象思想实现电话簿
采用封装,继承等手段实现。
题目分析:
电话簿中一般实现都是{人名:电话},但是人名出现重复怎们做
删除电话:根据人名删除还是电话删除
修改电话:修改人名还是修改电话
查询:人名查电话还是电话查人名,是准确查找还是模糊查找呢
================================================
针对上述问题实现一个电话簿"""class base_check(object):"""实现一个检测输入的类:因为电话簿中存在大量的输入操作,因此对于输入的人名或者是电话都需要一个检测"""def check_name_phone(self, name=None, phone=None):# 检测人名的合法性if name is not None:# 判断名字是不是字符串if isinstance(name, str):# 名字长度大于0小于等于30,并且由字符组成if 0 < len(name) <= 30 and name.isalpha():return Trueelse:return Falseelse:return Falseif phone is not None:# 电话是字符串if isinstance(phone, str):# 电话大于等于3并且小于等于11,并且电话是由数字组成的if 3 <= len(phone) <= 11 and phone.isdigit():return Trueelse:return Falseelse:return False# 获取人名def get_name(self):name = input("【输入联系人】: ").strip() # 去点多余的前后空格while True:if self.check_name_phone(name=name):return nameelse:name = input("【姓名格式有误,请重新输入联系人】: ").strip() # 去点多余的前后空格# 获取电话def get_phone(self):phone = input("【输入电话号】: ").strip() # 去点多余的前后空格while True:if self.check_name_phone(phone=phone):return phoneelse:phone = input("【电话格式有误,请重新输入电话号】: ").strip() # 去点多余的前后空格class phonedir(base_check):"""这个类用于实现电话簿的增删改操作"""def __init__(self):self.__dir = {} # 私有的字典存储{电话:姓名}# 添加def add(self):name = self.get_name()phone = self.get_phone()self.__dir[phone] = nameprint("添加成功!\n",{name : phone})# 删除def rem(self):while True:tmp = input("【选择删除方式:1-根据人名删除 2-根据电话删除 3-退出本次删除操作】:")if tmp == "1":name = self.get_name()if name in self.__dir.values():for i in self.__dir.items(): # items方法返回键值对if i[1] == name:self.__dir.pop(i[0])breakprint("删除成功!")else:print("待删除姓名不存在!")breakelif tmp == "2":phone = self.get_phone()if phone in self.__dir.keys():self.__dir.pop(phone)print("删除成功!")else:print("待删除的电话不存在!")breakelif tmp == "3":breakelse:print("标签有误重新输入!")# 修改姓名或者电话def edit(self):while True:tmp = input("【选择删除方式:1-修改人名 2-修改电话 3-结束本次修改操作】:")if tmp == "1":name = self.get_name()if name in self.__dir.values():for i in self.__dir.items():if i[1] == name:print("下面输入新姓名!")new_name = self.get_name()self.__dir[i[0]] = new_nameprint("修改成功!")breakelse:print("带修改得人名不存在!")breakelif tmp == "2":phone = self.get_phone()if phone in self.__dir.keys():name = self.__dir[phone] # 保存姓名,因为电话是key,姓名是valueself.__dir.pop(phone)print("下面输入新电话!")new_phone = self.get_phone()self.__dir[new_phone] = nameprint("修改成功!")elif tmp == "3":breakelse:print("标签有误重新输入!")# 明确查询def find_nameorphone(self):while True:tmp = input("【选择查询方式:1-通过姓名查询 2-通过电话查询 3-结束本次查询】:")if tmp == "1":name = self.get_name()if name in self.__dir.values():for i in self.__dir.items():if i[1] == name:print({name:i[0]})print("查询成功!")breakelse:print("查询的姓名不存在!")elif tmp == "2":phone = self.get_phone()if phone in self.__dir.keys():print({self.__dir[phone]:phone})else:print("查询的电话不存在!")elif tmp == "3":breakelse:print("标签有误重新输入!")# 模糊查询,根据姓名或者电话的前缀查询def find_nameorphone_pos(self):while True:tmp = input("【选择查询方式:1-通过姓名前缀查询 2-通过电话前缀查询(最少三位数字) 3-结束本次查询】:")if tmp == "1":name_pos = self.get_name()for i in self.__dir.items():if str(i[1]).find(name_pos,0) != -1:print({str(i[1]):str(i[0])})else:print("未找到相关联系人!")elif tmp == "2":phone_pos = self.get_phone()for i in self.__dir.keys():if str(i).find(phone_pos,0):print({self.__dir[i]:i})else:print("未找到相关联系人!")elif tmp == "3":breakelse:print("标签有误重新输入!")def showall(self):print("------电话簿------人数%d"%(len(self.__dir)))for i in self.__dir.items():print({str(i[1]):str(i[0])})print("-----------------------")class Main():"""这个类是最后的封装类,给用户使用的类"""def __init__(self):self.__phonedir = phonedir()# 打印一个提示目录def __Print(self):while True:opt = input("==============================\n""= ******欢迎使用我的电话簿******=\n""=    1-------添加联系人        =\n""=    2-------删除联系人        =\n""=    3-------修改联系人        =\n""=    4-------精准查询联系人     =\n""=    5-------模糊查询联系人     =\n""=    6-------显示所有联系人     =\n""=    7-------退出电话簿        =\n""===============================\n""请输入:")if opt.isdigit() and int(opt) > 0 and int(opt) < 8:return optelse:print("输入标签有误重新输入!")def main(self):while True:opt = self.__Print()if opt == "1":self.__phonedir.add()elif opt == "2":self.__phonedir.rem()elif opt == "3":self.__phonedir.edit()elif opt == "4":self.__phonedir.find_nameorphone()elif opt == "5":self.__phonedir.find_nameorphone_pos()elif opt == "6":self.__phonedir.showall()else:print("欢迎下次使用!")breakmain = Main()
main.main()

一个正在努力学习python的小白!

python实现电话簿相关推荐

  1. python:实现电话簿(附完整源码)

    python:实现电话簿 以下是 Python 实现电话簿的源代码: # 定义电话簿 phonebook = {'Alice': '123456', 'Bob': '234567', 'Charlie ...

  2. python简易电话簿系统_Python实现电话簿工具(代码分享)

    最近学了下python,用python实现了一个电话簿工具,主要实现思路是:通过字典来存储电话簿信息,以姓名作为主键,以联系人对象作为值存储,最后保存的时候通过python标准库提供的cPickile ...

  3. Python实现简单电话簿

    Python实现简单电话簿 时间有限,先上代码,后续讲解马上来 import time import os import pickle class Background_user:details={} ...

  4. Python实现简单的电话簿功能

    用Python实现简单的电话簿功能,添加.删除.查找.保存和提取功能 此处的思路:创建类,notes为类的变量,类中的方法对类的变量进行操作,包括保存和提取 其他思路: 创建人员类,创建操作类,在主函 ...

  5. python编程:电话簿TeleAddressBook和邮箱地址簿EmailAddressBook两个文件,合并为一个完整的AddressBook文件

    有电话簿TeleAddressBook和邮箱地址簿EmailAddressBook两个文件,使用字典结构将其合并为一个完整的AddressBook文件 . 变为: 代码如下: # -*- coding ...

  6. 送书 | 你一定能看懂的算法基础书(代码示例基于Python)

    本文引自图灵教育<算法图解> 你一定能看懂的算法基础书:代码示例基于Python:400多个示意图,生动介绍算法执行过程:展示不同算法在性能方面的优缺点:教会你用常见算法解决每天面临的实际 ...

  7. 哈佛CS50撕书教授在家录了一套4K网课,你准备好电话簿了吗?

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 哈佛大学 CS50 2020 秋季课程即将面世,在家也可以共享「撕书教 ...

  8. 通信专业学python有用吗-一起学Python:网络通信过程

    1. 2台电脑的网络 image 说明 如果两台电脑之间通过网线连接是可以直接通信的,但是需要提前设置好ip地址以及网络掩码并且ip地址需要控制在同一网段内,例如 一台为192.168.1.1另一台为 ...

  9. 用Python建设企业认证和权限控制平台

    目前大家对Python的了解更多来源是数据分析.AI.运维工具开发,在行业中使用Python进行web开发,同样也是非常受欢迎的,例如:FaceBook,豆瓣,知乎,饿了么等等,本文主要是介绍是利用P ...

最新文章

  1. 阿里云 centos 6.9 安装 mysql 5.7
  2. JAVA代码如何实现删除文件夹6_java文件创建、删除、读取、写入操作大全
  3. C指针笔试题,蛋疼的多重指针运算,谭浩强的阴影
  4. [BZOJ2616] SPOJ PERIODNI
  5. 同时使用传入和传出连接时,相互TLS身份验证存在Java问题
  6. 10分钟 在linux里创建.net core helloworld控制台程序
  7. 音视频开发(28)---流媒体并发量与宽带、码率计算详解
  8. 泰山JDK8率先支持多种权重(笔画粗细)的字体绘制
  9. 基于单片机的无线鼠标设计
  10. 正定矩阵、正定矩阵与极值的关系、黑塞矩阵、牛顿法
  11. 计算机网络实验一:网线制作和局域网组建
  12. 网站服务器后缀名,服务器域名,域名后缀
  13. Win10隐藏图标怎么恢复
  14. php发送邮件二种方法 php使用smtp发送邮件
  15. 微信iBeaconID-微信官方iBeacon蓝牙基站UUID编码
  16. 网络入侵检测IDS常用数据集KDD Cup99/NSL-KDD/UNSW-NB15/ADFA/CIC IDS2017/2018下载途径
  17. 有趣的第一人称和第三人称游戏
  18. PrintUtils-打印工具类
  19. IDBDatabase的数据库操作
  20. oracle的各版本发行时间及特点

热门文章

  1. python 答题卡识别_opencv+python机读卡识别整合版
  2. 华为鸿蒙宣传图,VIVO 联动华为?官方宣传图出现华为智联,为鸿蒙合作埋下伏笔...
  3. GIF录制工具(免安装)
  4. RMB小写转换成大写
  5. VOS3000软交换怎么样,云服务器可以配置吗?
  6. 本地自签https证书
  7. 改变xp开机和关机画面的方法
  8. Python之warnings模块忽略warning警告错误
  9. 博客专家贡献(2022年至今)--2022-11-29(转)
  10. Cors跨域(一):深入理解跨域请求概念及其根因