用Python实现简单通讯录
一个简单的通讯录例子
#!/usr/bin/python
__author__ = 'fierce'
#coding:utf-8 import os #引用os模块
import pickle #应用pickle模块 Path='/home/Person.data' #全局变量,这里是通讯录物理路径
#判断通讯录是否存在,不存在则创建空通讯录
if os.path.exists(Path) == False: #判断通讯录是否存在
f=open((Path),'wb') #以二进制写模式打开通讯录
temp={'total': 0} #局部变量,用于计算通讯录的人数
pickle.dump(temp,f) #将对象temp保存到f中
f.close() #关闭f
else:
pass #空函数
#添加联系人
def add(): #自定义添加函数
f=open((Path),'rb') #以二进制读模式打开通讯录
a=pickle.load(f) #从f中读取信息为数组的形式
f.close #关闭f
b=0 #自定义局部变量
name = input('请输入要添加联系人的姓名:') #获取输入,这里是姓名
for key in a.keys(): #循环key为自定义,a.keys()为从通讯录读出来所有key
b+=1 #自定义变量自增
if key==name and b <= a['total']+1: #判断,满足条件执行
print("联系人已存在,添加失败!")
break #跳出循环
if b==a['total']+1 and key != name: #判断,满足条件执行
number = input('请输入号码:') #获取输入
information={name : number} #附值
a['total']+=1 #total+1
a.update(information) #更新a对象
f=open((Path),'wb') #以二进制写模式打开通讯录
pickle.dump(a,f) #把a对象写入f
f.close() #关闭f
print('添加成功')
break #跳出循环
#显示所有联系人
def showall():
f = open((Path),'rb')
a=pickle.load(f)
print("一共有{}个联系人.".format(a['total']))
for key in a.keys():
if key != 'total':
print("{""}:{""}".format(key,a[key]))
f.close
#推出通讯录
def exit():
exec("quit()")
#查找
def search(name):
f = open((Path),'rb')
a=pickle.load(f)
b=0
for key in a.keys():
b+=1
if key==name and b<=a['total']+1:
print("{}的号码是:{}".format(name,a[key]))
break
if b==a['total']+1 and key != name:
print("联系人不存在")
break
#删除
def deleate(name):
f=open((Path),'rb')
a=pickle.load(f)
f.close()
b=0
for key in a.keys():
b+=1
if key==name and b<=a['total']+1:
a.pop(name)
a['total']-=1
f=open((Path),'wb')
pickle.dump(a,f)
f.close()
print("删除成功!")
break
if b==a['total']+1 and key != name:
print("联系人不存在!无法删除!")
break
#修改
def change():
x=input("请输入所要修改的联系人姓名:")
f=open((Path),'rb')
a=pickle.load(f)
f.close()
b=0
for key in a.keys():
b+=1
if key==x and b<=a['total']+1:
y=input("请输入修改后的号码:")
a[key]=y
f=open((Path),'wb')
pickle.dump(a,f)
f.close()
print("修改成功!")
break
if b==a['total']+1 and key != name:
print("联系人不存在")
break
#界面
def point():
print("*****************************")
print("显示提示信息:*")
print("显示所有联系人:0")
print("查找联系人:1")
print("添加联系人:2")
print("删除联系人:3")
print("更改联系人资料:4")
print("退出通讯录:5")
print("*****************************")
point()
#主进程
while True: #循环
x=input("请输入您的选择:") #获取输入
if x == 2: #判断输入
add() #调用添加函数
continue #结束本次循环,重新开始下一轮循环
if x == 0:
showall() #调用显示全部函数
continue #结束本次循环,重新开始下一轮循环
if x == 5:
exit() #调用推出函数
continue #结束本次循环,重新开始下一轮循环
if x == 1:
name = input("请输入所要查找的联系人姓名:")
search(name) #调用查找函数,需要传一个参数:姓名
continue #结束本次循环,重新开始下一轮循环
if x == 3:
name = input("请输入所要删除的联系人姓名:")
deleate(name) #调用删除函数,需要传一个参数:姓名
continue #结束本次循环,重新开始下一轮循环
if x == 4:
change() #调用修改函数
continue #结束本次循环,重新开始下一轮循环
if x == '*':
point()
else:
print("输入选项不存在,请重新输入!")
continue #结束本次循环,重新开始下一轮循环
用Python实现简单通讯录的更多相关文章
- Python 实现简单的 Web
简单的学了下Python, 然后用Python实现简单的Web. 因为正在学习计算机网络,所以通过编程来加强自己对于Http协议和Web服务器的理解,也理解下如何实现Web服务请求.响应.错误处理以及 ...
- 用 python实现简单EXCEL数据统计
任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码: import xlrd workbook = xlrd.open_ ...
- python开启简单webserver
python开启简单webserver linux下面使用 python -m SimpleHTTPServer 8000 windows下面使用上面的命令会报错,Python.Exe: No Mod ...
- Python开发简单爬虫 - 慕课网
课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序 课程目录 第1章 课程介绍 ...
- python使用简单http协议来传送文件
python使用简单http协议来传送文件!在ubuntu环境下,局域网内可以使用nc来传送文件,也可以使用基于Http协议的方式来下载文件我们可以使用python -m SimpleHTTPServ ...
- Python超简单的HTTP服务器
Python超简单的HTTP服务器 安装了python就可以 python -m SimpleHTTPServer 执行这一个命令即可实现一个HTTP服务器,将当前目录设为HTTP服务目录,可以通过h ...
- 教学项目之-通过Python实现简单的计算器
教学项目之-通过Python实现简单的计算器 计算器开发需求 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/ ...
- python多线程简单例子
python多线程简单例子 作者:vpoet mail:vpoet_sir@163.com import thread def childthread(threadid): print "I ...
- C# ASP.net 入门之简单通讯录
简单通讯录功能虽然简单,却包括了制作一个网站的基本功能!各个模块可以作为新手入门的参考. 简单通讯录实现功能:1.登录 2.注册 3.后台管理 4.前台登录显示 5.创建联系人 6.密码修改 代码下载 ...
随机推荐
- python基础之 正则表达式,re模块
1.正则表达式 正则表达式:是字符串的规则,只是检测字符串是否符合条件的规则而已 1.检测某一段字符串是否符合规则 2.将符合规则的匹配出来re模块:是用来操作正则表达式的 2.正则表达式组成 字符组 ...
- c++简单程序设计 实验一
实验内容: 2-28 实现一个简单的菜单程序,运行时显示“Menu:A(dd) D(elete) S(ort) Q(uit),Selete one:”提示用户输入.A表示增加,D表示删除, S表示排序 ...
- 干货 | LIDAR、ToF相机、双目相机如何科学选择?
点击"计算机视觉life"关注,置顶更快接收消息! 本文阅读时间约5分钟 本文翻译自卡内基梅隆大学 Chris asteroid 三维视觉技术的选择 传感器参数及定义 LIDAR ...
- 短信利用weixin://connectToFreeWifi/?apKey=协议跳转到微信打开落地页h5
微信门店wifi接口,任意站跳转,跳转二维码长按识别加粉,接口支持动态传参数,支持微信支付等特殊接口对接. 代码如下使用 <head> <meta charset="utf ...
- zookeeper的使用demo(c#/java)
Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它 ...
- 原生js获取 一个dom元素距离页面可视区域的位置值 -- getBoundingClientRect
getBoundingClientRect() 这个方法返回一个矩形对象,包含四个属性:left.top.right和bottom.分别表示元素各边与页面上边和左边的距离. var box=docum ...
- winsock I/O模型的分析
几种winsock I/O模型的分析 套接字是通信的基础,是支持网络协议数据通信的基本接口.Winsocket 提供了一些有趣的I/O模型,有助于应用程序通过一种“异步”方式,一次对一个或者多个套接字 ...
- sql中批量插入begin的使用
private static String ADD_ATTR_EXT_ITEM="insert into attr_ext_item(attr_ext_main_key,attr_name_ ...
- C#中的as关键字
你能进到这篇文章…… 首先你可能明白类似于 double num=0;int m=(int) num; 或者你明白 int m=209;String str=m.toString();或者说你甚至见过 ...
- Oracle树查询及相关函数
Oracle树查询的最重要的就是select...start with... connect by ...prior 语法了.依托于该语法,我们可以将一个表形结构的中以树的顺序列出来.在下面列述了Or ...