这是一个电话本练习,主要锻炼的是读写文件的能力,同时可以增强自身的交互意识。
#这是一个电话本软件
#作者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
#############################################################################################################