天天看点

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
#############################################################################################################