创建你自己的命令行 地址簿 程序。

在这个程序中,你可以添加、修改、删除和搜索你的联系人(朋友、家人和同事等等)以及它们的信息(诸如电子邮件地址和/或电话号码)。

这些详细信息应该被保存下来以便以后提取。

python version 3.4.3

 #创建你自己的命令行 地址簿 程序。在这个程序中,
#你可以添加、修改、删除和搜索你的联系人(朋友、家人和同事等等)
#以及它们的信息(诸如电子邮件地址和/或电话号码)。
#这些详细信息应该被保存下来以便以后提取。
# python version 3.4.3
import pickle as p
import sys
import os filename = 'phonebook.data' #创建一个类表示人的信息
class member:
def __init__(self,name,mail,phone):
self.name = name
self.mail = mail
self.phone = phone #从文件中取出对象并返回
def readbypickle(filename):
f = open(filename,'rb')
infos = p.load(f)
f.close()
return infos #将对象写入文件中
def writebypickle(infos,filename):
f = open(filename,'wb')
p.dump(infos,f)
f.close() def scanall():
infos = readbypickle(filename)
for name,info in infos.items():
print(name,'\t',info)
del infos
#infos在这里是对象,用完记得清掉 #key in someone,receive the info
def search():
infos = readbypickle(filename)
person = input('Please enter the name you are search:')
if person in infos:
print('Result:',infos[person])
else:
print('No data!')
del infos def update():
info = input('Please enter your updating info like:someone,abc@163.com,123: \n')
info_1 = info.split(',')
temp = member(info_1[0],info_1[1],info_1[2])
infos = readbypickle(filename)
infos[temp.name] = temp.mail + ',' + temp.phone
writebypickle(infos,filename)
del infos def delete():
infos = readbypickle(filename)
info = input('Please enter the name that you want to delete: ')
try:
del infos[info]
except:
print('delete failed,please check your input.')
finally:
print(infos)
writebypickle(infos,filename)
del infos def main():
while True:
command = input('\n==========Menu==========\n1 scan\n2 search\n3 update\n4 delete\n5 exit\n')
if command == '':
scanall()
elif command == '':
search()
elif command == '':
update()
elif command == '':
delete()
else:
sys.exit()
print('VersionInfo:',sys.version)
if(os.path.exists(filename)):
main()
else:
infos = {'Rebecah':'Rebecah@163.com,12345'}
writebypickle(infos,filename)
main()

[python]小练习__创建你自己的命令行 地址簿 程序的更多相关文章

  1. Vue Create 创建一个新项目 命令行创建和视图创建

    Vue Create 创建一个新项目 命令行创建和视图创建 开始之前 你可以先 >>:cd desktop[将安装目录切换到桌面] >>:vue -V :Vue CLI 3.0 ...

  2. 用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具

    用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具 前言 上周,同事抱怨说 react 怎么不能像 angular 那样,使用命令行工具来生成一个组件.对呀,平时工作时,想要创建 ...

  3. python模块----optparse模块、argparse模块 (命令行解析模块)

    简介 optparse module---自版本3.2以来已弃用:optparse模块已弃用,将不再进一步开发:将继续使用argparse模块进行开发.optparse使用一种更具声明性的命令行解析方 ...

  4. 命令行创建Android应用,命令行生成签名文件,命令行查看签名信息,对APK包签名并编译运行

    一.命令行创建Android应用 android create project -n HelloWorld -t android-22 -p HelloWorld1 -k org.crazyit.he ...

  5. OpenCV2+入门系列(二):图像的打开、创建与显示(命令行)

    前置知识:数字图像的简略知识 这里只是最基础的知识,上课如果稍微听了课的同学可以直接略过不不看. 彩色图像: 对于一副数字图像,对于一副RGB色彩空间的彩色数字图像,它一共有宽X高个像素格子,每个格子 ...

  6. windows小技巧 从文件夹直接打开命令行位置

    windows下从命令行打开某个目录下的东东时,会一直cd  ~~~~,更简单的是: 直接用鼠标找到该文件夹或者文件,按住Shift键然后点击鼠标右键,选择"在此处打开命令行"即可 ...

  7. MySQL Docker容器实例创建并进入MySQL命令行

    首先需要明白的一点是: docker镜像是一个模版,docker容器是一个实例,它可以被启动与关闭. 我们需要先有MySQL的docker镜像,使用命令: docker pull mysql 拉取最新 ...

  8. 【转】我的第一个Python小程序

    原文网址:http://blog.csdn.net/randyqiu/article/details/4484089 人的每个第一次都有点特别的意义,所以下面这个小程序我把他记录下来做个纪念. 因为要 ...

  9. Scrapy框架——介绍、安装、命令行创建,启动、项目目录结构介绍、Spiders文件夹详解(包括去重规则)、Selectors解析页面、Items、pipelines(自定义pipeline)、下载中间件(Downloader Middleware)、爬虫中间件、信号

    一 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可 ...

随机推荐

  1. VVDocumenter安装过程的一些问题

    vvdocument是瞄神写的一个插件 作用的话大家都知道 这里就不多说了 插件下载地址:https://github.com/onevcat/VVDocumenter-Xcode 1.下载后解压 编 ...

  2. C++11 半同步半异步线程池的实现

    #include <list> #include <mutex> #include <thread> #include <condition_variable ...

  3. Redis 笔记

    Redis是一个key-value存储系统.和Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持lists(链表).sets( ...

  4. linux 命令汇总

    一 Grep 命令 各种参数: -i:ignore-case忽略大小写 -c :打印匹配的行数 -l :从多个文件中查找包含匹配项 -v :查找不包含匹配项的行 -n :打印包含匹配项的行和行标 -w ...

  5. javaweb 国际化

    国际化又称为 i18n:internationalization 软件实现国际化,需具备哪些特征:对于程序中固定使用的文本元素,例如菜单栏.导航条等中使用的文本元素.或错误提示信息,状态信息等,需要根 ...

  6. ServletConfig与ServletContext对象(接口)

    ServletConfig:封装servlet的配置信息. 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. <ser ...

  7. Apache + PHP in Windows XP (to add SQLite)

    Firstly, Winxp do not support VC11+, so choose Apache packs compiled under VC10-. Before installatio ...

  8. POJ 2182/暴力/BIT/线段树

    POJ 2182 暴力 /* 题意: 一个带有权值[1,n]的序列,给出每个数的前面比该数小的数的个数,当然比一个数前面比第一个数小的个数是0,省略不写,求真正的序列.(拗口) 首先想到的是从前到后暴 ...

  9. android-misc-widgets四向(上下左右)抽屉bug修复版--转载

     android-misc-widgets四向(上下左右)抽屉bug修复版 2013-08-04 08:58:13 标签:bug down top panel slidingdrawer 原创作品,允 ...

  10. Android Studio的使用(五)--导入第三方Jar包

    本篇博文将介绍一下如何导入第三方Jar包. 1.首先将下载的Jar包直接Copy到libs目录下面,然后右击Jar文件,点击Add As Library后,在出现的弹出框点击确定即可. 2.打开bui ...