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.www58058.com/1365

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

相關推薦

  • 【LINUX編譯安裝程序】Centos7.4編譯安裝httpd 2.4.29

    舉例:Centos7.4編譯安裝httpd 2.4.29

    Linux干貨 2018-03-17
  • Linux程序包管理rpm

    CentOS系統上rpm命令管理程序包: 安裝、卸載、升級、查詢、校驗、數據庫維護  安裝: rpm {-i|–install} [install-options] PACKAGE_FILE … -v: verbose -vv: -h: 以#顯示程序包管理執行進度;每個#表示2%的進度  rpm -ivh PACK…

    Linux干貨 2015-06-21
  • MySQL入門命令知識

    簡單介紹下吧,MySQL應用的場景大多數互聯網公司第一次賣身是賣個了sun好像是10億,第二次是連同sun自己,以74億美元被賣給了Orecle~后面MySQL原作者站出來說,MySQL會存在閉源風險,整了個MariaDB~我也是醉了,也不考慮下我們的痛苦!下面簡要介紹下MySQL的入門知識。    一、MySQL有三種定義語言 &nbs…

    2016-12-05
  • httpd服務歸納:httpd基本配置(https原理以及配置 )

    一 https介紹以及實現機制   1. https協議:      在傳統的http協議中,文檔是明文傳送的,網頁涉及敏感信息是,將變得很不安全。為了保證敏感信息的安全,httpd結合加密庫openssl或openssh 產生了https 協議。這就好比兩個黑社會團伙交易,都怕出事被抓,…

    Linux干貨 2015-05-23
  • LB-lvs

    Linux Cluster: Cluster:計算機集合,為解決某個特定問題組合起來形成的單個系統; Linux Cluster類型: LB:Load Balancing,負載均衡; HA:High Availiablity,高可用; A=MTBF/(MTBF+MTTR) (0,1):90%, 95%, 99%, 99.5%, 99.9%, 99.99%, …

    Linux干貨 2017-06-25
  • 每日一練–8.8 sed,vim

     1 、刪除/etc/grub2.conf 文件中所有以空白開頭的行行首的空白字符     sed  's/^[[:space:]]//g' /etc grub2.conf ? 2 、刪除/etc/fstab 文件中所有以# 開頭,后面至少跟一個空白字符的行的行首的# 和空白字符   &n…

    Linux干貨 2016-08-12

評論列表(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

    不錯的文章,內容栩栩如生.

欧美性久久久久