1. 程式人生 > >列表的應用例項——用Python實現簡單的通訊錄

列表的應用例項——用Python實現簡單的通訊錄

Python3 列表

序列是Python中最基本的資料結構。序列中的每個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。

Python有6個序列的內建型別,但最常見的是列表和元組。

序列都可以進行的操作包括索引,切片,加,乘,檢查成員。

此外,Python已經內建確定序列的長度以及確定最大和最小的元素的方法。

列表是最常用的Python資料型別,它可以作為一個方括號內的逗號分隔值出現。

列表的資料項不需要具有相同的型別

建立一個列表,只要把逗號分隔的不同的資料項使用方括號括起來即可。如下所示:

list1 = ['Google', 'Runoob', 1997, 2000];

list2 = [1, 2, 3, 4, 5 ];

list3 = ["a", "b", "c", "d"];

與字串的索引一樣,列表索引從0開始。列表可以進行擷取、組合等。

pickle 模組

python的pickle模組實現了基本的資料序列和反序列化。

通過pickle模組的序列化操作我們能夠將程式中執行的物件資訊儲存到檔案中去,永久儲存。

通過pickle模組的反序列化操作,我們能夠從檔案中建立上一次程式儲存的物件。

基本介面:

pickle.dump(obj, file, [,protocol])

有了 pickle 這個物件, 就能對 file 以讀取的形式開啟:

x = pickle.load(file)

註解:從 file 中讀取一個字串,並將它重構為原來的python物件。

下面以簡單的通訊錄為例,簡要介紹pickle和列表


import os
import pickle

datafile='person.data'
line='---------------------------------------'
message='''
---------------------------------------
    目 錄
按0:顯示列表
按1:增加聯絡人
按2:編輯聯絡人
按3:刪除聯絡人
按4:搜尋聯絡人
按5:顯示目錄
按6:退出
---------------------------------------
'''
print(message)


        
    
def read_data (filename=datafile):
    if os.path.exists(filename) and os.path.getsize(filename):
        with open(filename,'rb') as f:
            return pickle.load(f)
    return None

def write_data (name,number,filename=datafile):
    personlist={} if read_data () == None else read_data()#
    with open(filename,'wb') as f:
        personlist[name]=Person(name,number)
        pickle.dump(personlist,f)


class Person(object):
    def __init__(self,name,number):
        self.name=name
        self.number=number


def save_data(dictPerson,filename=datafile):
    with open(filename,'wb') as f:
        pickle.dump(dictPerson,f)


def display_all_person():
    personlist=read_data()
    if personlist:
        for v in personlist.values():
           # print('%s     %s' %(keys,values))
           print(str(v.name).ljust(10),str(v.number).ljust(11))
        print(line)
    else:
        print('')
        print('無聯絡人,現在就新增?')
        flag1=int(input('新增->1,取消->2  '))
        if flag1==1:
            name=input('輸入姓名:')
            number=input('輸入號碼:')
            add_person(name,number)
        elif flag1==2:
            print('已取消')
            print(line)

def add_person(name,number):
    write_data(name,number)
    print('新增成功')
    print(line)


def edit_person(name):
    personlist=read_data()
    if personlist:
        if name in personlist.keys():
            #name=input('輸入姓名:')
            number=input('輸入號碼:')
            personlist[name]=Person(name,number)
            save_data(personlist)
            print('編輯成功')
            print(line)
        else:
            print(name,'不在通訊錄中,是否新增?')
            flag3=int(input('新增->1,取消->2  '))
            if flag3==1:
                #name=input('輸入姓名:')
                number=input('輸入號碼:')
                add_person(name,number)
            elif flag3==2:
                print('已取消')
                print(line)
       

def del_person(name):
    personlist=read_data()
    if personlist:
        if name in personlist:
            flag=int(input('確認刪除嗎?確認->1,取消->2  '))
            if flag==1:
                del personlist[name]
                save_data(personlist)
                print('刪除成功')
            elif flag ==2:
                print('已取消')
                #print(message)    
        else:
            print(name,'不在通訊錄中。')
    print(line)


def search_person(name):
    personlist=read_data()
    if personlist:
        if name in personlist.keys():
            print('')
            print(str('姓名').ljust(8),str('號碼').ljust(9))
            print(str(personlist.get(name).name).ljust(10),str(personlist.get(name).number).ljust(11))
            print(line)
        else:
            print(name,'不在通訊錄中,是否新增?')
            flag2=int(input('新增->1,取消->2  '))
            if flag2==1:
                #name=input('輸入姓名:')
                number=input('輸入號碼:')
                add_person(name,number)
            elif flag2==2:
                print('已取消')
                print(line)


while True:
    num = input('->')

    if num == '0':
        print(line)
        print('顯示聯絡人')
        print(str('姓名').ljust(8),str('號碼').ljust(9))
        display_all_person()
        #print(line)
    elif num =='1':
        print(line)
        print('增加聯絡人')
        name=input('輸入姓名:')
        number=input('輸入號碼:')
        add_person(name,number)
    elif num=='2':
        print(line)
        print('編輯聯絡人')
        name=input('輸入姓名:')
        #number=input('輸入號碼:')
        edit_person(name)
    elif num=='3':
        print(line)
        print('刪除聯絡人')
        name=input('輸入姓名:')
        del_person(name)
    elif num=='4':
        print(line)
        print('搜尋聯絡人')
        name=input('輸入姓名:')
        search_person(name)
    elif num=='5':
        print(message)
    elif num=='6':
        break
    else:
        print('錯誤!請重新輸入->')
               
    
    
    
        
    
        

執行結果圖