python写一个通讯录之step by step

编写过程:

   

第一步:手动代码堆积
       

第二步:函数复用
       

第三步:数据持久化之数据保存
       

第四步:数据持久化之数据读取
       

第五步:数据持久化之数据删除
       

第六步:数据持久化之数据更新
       

初稿—》数据持久化之保存数据—–》数据持久化之加载数据—–》数据持久化之删除数据—-》数据持久化之检索数据—》数据持久化之数据更新
   

本演示不为堆积代码,仅为梳理一个编码的概念过程~希望对你有所帮助
   

第一步:手工代码堆积

   

#!/usr/bin/env python#coding:utf8#Author:zhuima#Email:993182876@qq.com#Date:2015-03-23#Function:Create the address book step by step#Version:0.1#Initialized variablesmsg = '''    1. Add information    2. Display information    0. Exit '''#txl content like this tex = [['name','gender','telphone'],['name','gender','telphone']]txl = []#define Add#define displaywhile True:    print msg    op = raw_input('Please Select >>> ')    if op == '1':        name = raw_input('Please Enter Your name >>> ')        gender = raw_input('Please Enter Your gender >>> ')        tel = raw_input('Please Enter Your Telphone Number >>> ')        txl.append([name,gender,tel])    elif op == '2':        for list in txl:               for info in list:              print info,           print ''    elif op == '0':        break    else:        print ''        print 'Unkonw Choose,Please Select again!'        print ''

用到的python功能:
       

  1. while循环:实现循环输入

  2. if判断:判断输入内容并进行调用相关函数

  3. break:跳槽循环

  4. 列表:在当前会话中保存数据

  5. 三引号的使用

测试结果:

python写一个通讯录之step by step

Note:

    print打印时,不换行使用','来实现,但是针对嵌套列表来说,很可能出现下面的情况,这个时候在跳出当前循环print空白行即可。

python写一个通讯录之step by step

第二步:函数复用

   

   

如此我们也能实现我们想要的功能,但是总感觉有点别扭,要不要来点高大上的,来来来,叫来函数来一发~
   

python写一个通讯录之step by step

代码如下:
   

#!/usr/bin/env python
#coding:utf8
#Author:zhuima
#Email:993182876@qq.com
#Date:2015-03-23
#Function:Create the address book step by step
#
#Initialized variables
msg = '''
    1. Add information
    2. Display information
    0. Exit 
'''
#txl content like this tex = [['name','gender','telphone'],['name','gender','telphone']]
txl = []
#define Add
def Add():
    name = raw_input('Please Enter Your name >>> ')
    gender = raw_input('Please Enter Your gender >>> ')
    tel = raw_input('Please Enter Your Telphone Number >>> ')
    txl.append([name,gender,tel])
#define display
def Disp():
    for list in tel:
        for info in list:
            print info,
while True:
    print msg
    op = raw_input('Please Select >>> ')
    if op == '1':
        Add()
    elif op == '2':
        Disp()
    elif op == '0':
        break
    else:
        print ''
        print 'Unkonw Choose,Please Select again!'
        print ''

引入新功能:
   

    python函数功能

测试结果:
   

测试结果其实和第一步是一样的,没有什么区别~

python写一个通讯录之step by step

第三步:数据持久化之保存数据

   

   

这里我们用函数来实现了格式化代码,复用等功能,但是我关闭了当前会话,所有的东西又都没了,那这就是闹玩呗,没有实际意义啊~
   

所以这里我们要引入数据持久化的概念~(这里仅讨论文件保存形式的数据持久化,不涉及数据库相关)

python写一个通讯录之step by step

引入功能:

    字符串和列表转换,将列表转成字符串,然后写入文件

代码如下:
   


   

#define save
def Save():
    temp = []
    for info in txl:
        temp.append(','.join(info))
        s = '\n'.join(temp)
        fp = file('txl.db','w')
        fp.write(s)
        fp.close()
while True:
    print msg
    op = raw_input('Please Select >>> ')
    if op == '1':
        Add()
        Save()
    ....

测试效果:

python写一个通讯录之step by step

第四步:数据持久化之数据读取

   

python写一个通讯录之step by step

引入功能:
       

    字符串和列表转换,将字符串传换成列表,然后追加到列表中
       

       

代码如下:
           


           

#define load
def Load():
    fp = file('txl.db','r')
    content = fp.read()
    temp = content.split('\n')
    for info in temp:
        txl.append(info.split(','))
Load()
while True:
    ....

测试效果:
   

python写一个通讯录之step by step

第五步:数据持久化之删除数据

   

   

                                                                        

引入功能:
   

    检索账号,找到账号对应的子列表所在的索引,进行删除操作
   

    如何在嵌套列表中找到value对应的索引?

   

   

代码片段如下:
       


       

....
msg = '''
    1. Add information
    2. Display information
    3. Delete by name
    0. Exit 
'''

#define del
def Del():
    name = raw_input('Please Enter which one name you want to delete >>> ')
    for sub in txl:
        if sub[0] == name:
            txl.remove(sub)
            break
Load()
while True:
    print msg
    op = raw_input('Please Select >>> ')
    if op == '1':
        Add()
                Save()
    elif op == '2':
        Disp()
    elif op == '3':
                Del()
                Save()
    ....

测试效果:

python写一个通讯录之step by step

第六步:数据持久化之更新数据

   

python写一个通讯录之step by step

引入功能:
   

    和删除数据同理,检索账号,找到账号对应的子列表所在的索引,进行相关value的更新操作
   

   

代码片段如下:
       


       

#Initialized variables
msg = '''
    1. Add information
    2. Display information
    3. Delete by name
    4. Update by name
    0. Exit 
'''
info = '''
    001. name
    002. gender
    003. tel
    004. all
'''

#define change 
def Change():
    xingming = raw_input('Please Enter which one name you want to change >>> ')
    print info
    op = raw_input('Please select which one you want to change: ')
    for sub in txl:
        if sub[0] == xingming:
            if op == '001':
         name = raw_input('Please Enter Your name: ')
                 txl[txl.index(sub)][0] = name
            elif op == '002':
         gender= raw_input('Please Enter Your gender: ')
                 txl[txl.index(sub)][1] = gender
            elif op == '003':
         tel = raw_input('Please Enter Your tel: ')
                 txl[txl.index(sub)][2] = tel
        else:
         name = raw_input('Please Enter Your name: ')
         gender= raw_input('Please Enter Your gender: ')
         tel = raw_input('Please Enter Your tel: ')
             txl[txl.index(sub)] = [name,gender,tel]    
            break
Load()
while True:
    print msg
    op = raw_input('Please Select >>> ')
    if op == '1':
        Add()
                Save()
    elif op == '2':
        Disp()
    elif op == '3':
                Del()
                Save()
    elif op == '4':
                Change()
                Save()
    ....

测试效果:

python写一个通讯录之step by step
   

   

整体思路:

   

完成一个通讯录的增删查改,局限于列表,完善自己的组建代码的一个思路,搭建起一套框架。

你要思考的问题:

  1. 初始化数据

  2. 如何增加数据

  3. 数据如何写入到文件

  4. 如何从文件中读取数据到列表

  5. 如何删除数据并同步到文件

  6. 如何更新数据并同步到文件

完整代码块:
       


       

#!/usr/bin/env python
#coding:utf8
#Author:zhuima
#Email:993182876@qq.com
#Date:2015-03-23
#Function:Create the address book step by step
#
#Initialized variables
msg = '''
    1. Add information
    2. Display information
    3. Delete by name
    4. Update by name
    0. Exit 
'''
info = '''
    001. name
    002. gender
    003. tel
        004. all
'''
#txl content like this tex = [['name','gender','telphone'],['name','gender','telphone']]
txl = []
#define Add
def Add():
    name = raw_input('Please Enter Your name >>> ')
    gender = raw_input('Please Enter Your gender >>> ')
    tel = raw_input('Please Enter Your Telphone Number >>> ')
    txl.append([name,gender,tel])
#define display
def Disp():
    for list in txl:
        for info in list:
        print info,
            print ''
#define save
def Save():
    temp = []
    for info in txl:
        temp.append(','.join(info))
        s = '\n'.join(temp)
        fp = file('txl.db','w')
        fp.write(s+'\n')
        fp.close()
#define load
def Load():
    import os
    if  os.path.exists('txl.db'):
        fp = file('txl.db','r')
        content = fp.read()
        fp.close()
        temp = content.split('\n')
        for info in temp:
            txl.append(info.split(','))
    else:
        fp = file('txl.db','w')
        fp.close()
#define del
def Del():
    name = raw_input('Please Enter which one name you want to delete >>> ')
    for sub in txl:
        if sub[0] == name:
            txl.remove(sub)
            break
#define change 
def Change():
    xingming = raw_input('Please Enter which one name you want to change >>> ')
    print info
    op = raw_input('Please select which one you want to change: ')
    for sub in txl:
        if sub[0] == xingming:
            if op == '001':
         name = raw_input('Please Enter Your name: ')
                 txl[txl.index(sub)][0] = name
            elif op == '002':
         gender= raw_input('Please Enter Your gender: ')
                 txl[txl.index(sub)][1] = gender
            elif op == '003':
         tel = raw_input('Please Enter Your tel: ')
                 txl[txl.index(sub)][2] = tel
        else:
         name = raw_input('Please Enter Your name: ')
         gender= raw_input('Please Enter Your gender: ')
         tel = raw_input('Please Enter Your tel: ')
             txl[txl.index(sub)] = [name,gender,tel]    
            break
Load()
while True:
    print msg
    op = raw_input('Please Select >>> ')
    if op == '1':
        Add()
                Save()
    elif op == '2':
        Disp()
    elif op == '3':
                Del()
                Save()
    elif op == '4':
                Change()
                Save()
    elif op == '0':
        break
    else:
        print ''
        print 'Unkonw Choose,Please Select again!'
        print ''

作者:追马

博客:http://lovelace.blog.51cto.com/

       

原创文章,作者:追马,如若转载,请注明出处:http://www.178linux.com/1365

(0)
追马追马
上一篇 2015-03-26 11:16
下一篇 2015-03-26 11:52

相关推荐

  • N22-第六周作业

    请详细总结vim编辑器的使用并完成以下练习题      vim是模式化的文本编辑器。在不同模式下,每一次按键的效果都不一样。vim有三种工作模式,分别是编辑模式,插入模式和末行模式。编辑模式是打开vim后的默认模式,用于查看文本或进行复制,粘贴,删除等编辑命令。插入模式是为了向文本中输入信息。末行模式是vim自带的命令行接口,能…

    Linux干货 2016-09-26
  • 文件查找相关:whereis、find和locate

        本文将对find和locate进行详细讲解 命令简介 名称:whereis     功能:定位文件所在的目录     用法:whereis shell命令     注意:whereis是根据环境变量PATH来查找文件的,而PATH通常设置成存放命令的那些路径,如/bin、…

    Linux干货 2016-04-05
  • 安装配置NFS服务和挂载(Centos7)

    NFS简介 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。 RPC(NFS服务需要依赖RPC服务,这个比较重要) 要想了解NFS,必然要提到R…

    Linux干货 2017-04-21
  • 文本编辑器—sed

    一、sed介绍 sed 一种流式编辑器。一个流式编辑器通常对来自输入流(一个文件或者是管道的输入)的文本进行转换处理。在某些方面类似支持脚本编辑的编辑器,sed在多输入情况下只开放一个通道工作,因此更加效率。sed与其他编辑器最大的区别在于,能对管道输入的文本进行过滤处理。 二、sed工作机制 sed保持两个数据缓冲区:主要活动的模式空间,以及辅助性的保持空…

    Linux干货 2016-08-12
  • find查找

    find查找是生产中最常见的日志查找工具 下面看看它的用法 基本用法: find    查找路径    查找标准    查找到以后的处理动作 查找路径:需要被查找的文件所在的路径,一定是个目录,默认情况下为当前的目录 查找的标准:查找的时候用什么方式去查找 处理动作:文件查找完毕后,需要对查找出来的…

    Linux干货 2017-05-08
  • sed基础

    sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed 主要用来自动编辑一个或多个文件, 简化对文件的反复操…

    Linux干货 2017-05-01

评论列表(5条)

  • 斯巴达克斯
    斯巴达克斯 2015-03-23 17:50

    追马大神写的屌啊

  • myb_sir
    myb_sir 2015-03-23 17:52

    好屌,赞一个。

  • stanley
    stanley 2015-04-02 09:31

    python大神,写个机器人吧

  • 肉牛
    肉牛 2015-04-06 02:43

    好文章,内容言简意赅.

  • 防火板
    防火板 2015-04-08 04:20

    不错的文章,内容栩栩如生.