天天看點

python 電話本

這是一個電話本練習,主要鍛煉的是讀寫檔案的能力,同時可以增強自身的互動意識。
           
#這是一個電話本軟體
#作者bylinzowo
#python code



####################################################自定義函數#############################################################

##################################################添加聯系人函數###########################################################
def add_contacter():
    while True:
        name=raw_input('please enter the name:')
        name.strip()#删除文本中的空格

        if name !='':  #這一條語句同下面的number變量操作
            break
        print'sorry the contacter\'s name must be have type. please enter agin.'
    while True:
        number=raw_input('please enter the number:')
        if number !='':
            break       #使用者輸入的值合法就跳出while循環
        print'sorry the contacter\'s number must be have something. please enter agin.'
    
    cover=True  #後面用來控制是否覆寫聯系人的變量
    if name in contacter_dic:  #檢查使用者輸入的資訊是否已經存在
        print'{0} already exists'.format(name)  #告知使用者這個名字已經存在
        
        while True:
            control=raw_input('''++++++++++++++++++++++++++++++
enter [c] cover this number
enter [n] retention date and save new number
enter [q] quit
++++++++++++++++++++++++++++++
>>>''')  #詢問使用者是否需求
            if control=='c':
                break       #如果使用者要覆寫前面的内容就不更改資訊
            if control=='n':
                cover=False   #如果使用者要保留資訊并添加号碼就更改cover屬性
                break
            if control=="q":
                return None  #如果使用者選擇退出就跳出循環結算這個函數
            print'input error! please enter agin'   #其他輸入提示輸入錯誤


        if cover:
            contacter_dic[name]=number  #如果cover的值為true就覆寫原來的内容
            print'successfully saved!'
        else:
            if number in contacter_dic[name]:  #否則就檢查這個号碼是否已經存在
                print'this number already exists.'
            else:
                contacter_dic[name]=contacter_dic[name]+'/'+number #如果号碼不存在就将新的号碼追加到後面
                print'successfully saved!'
    else:
        contacter_dic[name]=number
        print'successfully saved!'
########################################################################


#########################################################讀取聯系人####################################################
def find_contacter():
    i=0   #後面用來檢查字典内是否存在使用者輸入的号碼
    while True:               #保證使用者輸入錯誤的時候能再次輸入
        control=raw_input('''++++++++++++++++++++++++++++++
enter [nu] find the number
enter [na] find the name
enter [all] view all contacts
enter [quit] quit main
+++++++++++++++++++++++++++++
>>>''')   #擷取使用者需求
        control.strip()
        if control=='quit':
            return
        if control!='':
            break
        print 'Error input, please enter again.'
    if control=='nu':   #分支結構分别滿足不同需求、這是通過名字查找電話号碼
        while True:
            name=raw_input('who\'s number you want to find:')
            if name !='':     #如果使用者的輸入不為0就跳出循環
                break
            print'sorry the contacter\'s name must be have type. please enter again.'
        if contacter_dic.has_key(name):  #如果字典中有聯系人就直接輸出相關資訊
            print'''++++++++++++++++++++++++++++++
name:{0}
phone number:{1}
+++++++++++++++++++++++++++++'''.format(name,contacter_dic[name])
        else:
            print'srroy you don\'t have the contacter'
            add_control=raw_input('''++++++++++++++++++++++++++++++
enter [a] add a new contacter
enter [q] quit
+++++++++++++++++++++++++++++
>>>''')   #如果沒有這個聯系人就詢問使用者是否添加
            if add_control=='a':
                number=raw_input('enter the number:')
                contacter_dic[name]=number    #因為前面已經檢查過是否存在這個聯系人是以這裡直接添加
                print'successfully saved!'
            if add_control=='q' :
                return

    if control=='na':    #通過電話查找使用者姓名
        while True:
            number=raw_input('please enter this number:')   #檢查使用者輸入是否有效
            if number!='':
                break
            print'input error please enter again'
        for key in contacter_dic:   #周遊字典中的key
            if str(contacter_dic[key])==number:  #通過周遊的key尋找是否存在相同的value
                i+=1   #如果存在一個就指派一次
                print '''++++++++++++++++++++++++++++++
name:{0}
number:{1}'''.format(key,number)

        if i==0:   #如果在上個循環中未被指派就代表字典内沒有使用者輸入的電話号碼
            print'you don\'t have the contacter'   #否則就添加聯系人原理同上
            add_control=raw_input('''++++++++++++++++++++++++++++++
enter [a] add a new contacter
enter [q] quit
+++++++++++++++++++++++++++++
>>>''')
            if add_control=='a':
                name=raw_input('enter the name:')
                if contacter_dic.has_key(name):
                    contacter_dic[name]=contacter_dic[name]+'/'+number
                else:
                    contacter_dic[name]=number
                print'successfully saved!'
            if add_control=='q' :
                return
    if control=='all':   #輸出字典内所有的内容
        print'++++++++++++++++++++++++++++++'
        for key in contacter_dic:
            print(key+':'+str(contacter_dic[key]))
        print'++++++++++++++++++++++++++++++'
#################################################################

#删除聯系人函數
def del_contacter():

    print'''
++++++++++++++++++++++++++++++
this is your all contacts:'''
    for key in contacter_dic:
        print(key+':'+str(contacter_dic[key]))
    print'++++++++++++++++++++++++++++++'

    while True:
        name=raw_input('delete name:')
        if name !='':
            break
        print'input error, please enter again'
    control=raw_input('''confirm delete enter [c]
gave up deleteing enter [q]
>>>''')
    if control=='q':
        return
    if control=='c':
        contacter_dic.pop(name)
        print'delete successfuly!'
#################################################################

######################################################删除聯系人函數#####################################################
def del_contacter():

    print'''
++++++++++++++++++++++++++++++
this is your all contacts:'''
    for key in contacter_dic:
        print(key+':'+str(contacter_dic[key]))
    print'++++++++++++++++++++++++++++++'

    while True:
        name=raw_input('delete name:')
        if name !='':
            break
        print'input error, please enter again'
    control=raw_input('''confirm delete enter [c]
gave up deleteing enter [q]
>>>''')
    if control=='q':
        return
    if control=='c':
        contacter_dic.pop(name)
        print'delete successfuly!'



#初始化文本資料
#contacter_dic={'a':123}
#phonebook=open('phonebook.txt','r+')
#phonebook.write(str(contacter_dic))
#phonebook.close()

#####################################################變量########################################################

phonebook=open('phonebook.txt','r+')
contacter_dic=eval(phonebook.read())  #eval将字元串轉換為字典型
phonebook.close()

#####################################################主程式###############################################
while True:
    print'''++++++++++++++++++++++++++++++
this a phone book app.
add contacter enter>>>[a]
find contacter enter >[f]
delete contacter enter[d]
close app enter >>>>>>[quit]
+++++++++++++++++++++++++++++
>>>'''
    do=raw_input('what do you want to do?\n>>>')

    if do=='a':
        add_contacter()
        phonebook=open('phonebook.txt','w+')
        phonebook.write(str(contacter_dic))
        phonebook.close()
    if do=='f':
        find_contacter()
        phonebook=open('phonebook.txt','w+')
        phonebook.write(str(contacter_dic))
        phonebook.close()
    if do=="d":
        del_contacter()
        phonebook=open('phonebook.txt','w+')
        phonebook.write(str(contacter_dic))
        phonebook.close()
    if do=="quit":
        break
#############################################################################################################