|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
[课后作业] 第025讲:字典:当索引不好用时 | 课后测试题
利用字典的特性编写一个通讯录程序:
- def 输入正确(n,*tuple1):
- """
- 输出一个符合条件的字符串
- :param n=str input中需写入说明话语
- :param tuple1:元祖集
- :return: 返回符合条件的字符串
- """
- string = input('%s'%n) #n为说明
- # 如果输入为空或者不在tuple1内,则重新输入,知道输入正确为止
- while (string=='') or string not in tuple1:
- print('输入有误,请重新输入')
- string =input('%s'%n)
- return string
- def 电话输入正确():
- '''
- 输出一个符合电话号码要求的字符串
- :return: 返回符合条件的字符串
- '''
- n=1 #无意义,只是用来使循环跑起来可进行改进
- while n:
- string = input('请输入用户联系电话:')
- if string =='': #如果为空值,则重新输入
- continue
- else:
- temp = 1 #设置判断器
- #如果每一个输入字符都在规定的电话号码字符串内,则判断有效,否则重新输入
- for each in range(len(string)):
- if string[each] in '1234567890-':
- temp *=1
- else:
- temp *=0
- if temp ==0: #无效重新输入
- print('输入有误,请重新输入')
- continue
- if temp ==1: #有效退出循环
- break
- return string #返回输入的字符串
- def 初选(telbook):
- '''
- 选择器,用于进入各项功能
- :param telbook: 读入通讯录
- '''
- select =输入正确('\n【主程序】请输入操作指令:\n(1.列举,2.查增,3.增改,4.删,5.退出程序):','1','2','3','4','5')
- while select !='5': #如果不等于退出,则一直循环
- if select == '1': # 进入罗列模块
- count = 0 #设置计数器
- print('')
- for each in list(telbook.keys()): #将字典 键值对(项) 罗列出来
- print('【%-18s】'%(str(each)+': '+str(telbook[each])),end='')
- print(' ',end='')
- count +=1
- if (count%5) == 0: #五个一行
- print('')
- print('')
- if select == '2': # 进入查询模块
- 查(telbook)
- if select == '3': # 进入插入模块
- 插(telbook)
- if select == '4': # 进入删除模块
- 删(telbook)
- select = 输入正确('\n【主程序】请输入操作指令:\n(1.列举,2.查增,3.增改,4.删,5.退出程序):','1','2','3','4','5')
- print('|---感谢使用该通讯录程序---|')
- # exit()
- def 改(telbook,shuru):
- '''
- 修改通讯录字典
- :param telbook:读入通讯录
- :param shuru: 读入KEY值
- :return: 返回修改后的通讯录
- '''
- telbook[shuru] = 电话输入正确()
- print('成功修改 %s 的联系方式为:%s'%(shuru,telbook[shuru]))
- return telbook
- def 查(telbook):
- '''
- 查询通讯录
- :param telbook: 读入通讯录
- :return: 返回通讯录,因未作修改,可不返回
- '''
- cun = [0] #预设一个条件存储器,初始值非空即可
- while cun != []: #当存储器为空(即无一个字符在通讯录键值里)时,退出循环
- cun =[] #清空存储器,准备存储符合条件的键值
- shuru = input('\n请输入联系人姓名:')
- result = telbook.get(shuru, '查无此人')
- keys = list(telbook.keys()) # 读入通讯录姓名列表
- for each in keys: # 进行判断,如果有联系人姓名包含有输入字符,则把该姓名存储进存储器,没有存储器为[]
- if shuru in each:
- cun.append(each)
- if cun != []: # 如果存储器有值,则列举出所有包含输入字符的联系人姓名和电话
- print('相关联系人有:')
- count = 0
- for each in cun:
- print('【%-18s】' % (each + ': ' + telbook[each]), end=' ')
- count += 1
- if count % 5 == 0: print('') # 每5个1行
- print('')
- if result == '查无此人': #如果联系人姓名不在通讯录中
- isadd = 输入正确('需要添加该联系人进通讯录吗(YES/NO)', 'YES', 'NO') #是否将该字符录入进通讯录
- if isadd == 'YES':
- return 改(telbook,shuru) #进入改()函数
- else:
- continue #进行再次查询
- else: #如果输入值与通讯录中联系人姓名完全匹配,则输出对应的键值对(项)
- print('\n你查找的联系人信息如下:\n',shuru,telbook[shuru])
- return telbook
- def 插(telbook):
- shuru = input('请输入需要新添加的联系人姓名:')
- if telbook.get(shuru,'没有这人') =='没有这人':
- number =电话输入正确()
- telbook.setdefault(shuru,number)
- print("成功将 %s :%s 加入到通讯录中"%(shuru,number))
- return telbook
- else:
- print('你输入的姓名在通讯录已存在-->>',shuru,':',telbook[shuru])
- isadd = 输入正确('是否修改用户资料(YES/NO):','YES','NO')
- if isadd == 'YES':
- return 改(telbook,shuru) #进入改写模块
- def 删(telbook):
- shuru =input('请输入需要删除的联系人:')
- if shuru in telbook:
- telbook.pop(shuru)
- print('联系人:%s删除成功!\n'%(shuru))
- else:
- print(shuru,'不在通讯录中')
- a=[0]*6
- a[0]='欢迎进入通讯录程序'
- a[1]='1.列出通讯录名单'
- a[2]='2.查增联系人资料'
- a[3]='3.增改联系人资料'
- a[4]='4.删除已有联系人'
- a[5]='5.退出通讯录程序'
- i = 0
- for each in a:
- a[i]='|'+each.center(25,'-')+'|'
- print(a[i])
- i +=1
- telbook={'王二小': '1864211242', '王三贵': '999-2', '巴倒烫': '21444-242',
- '巴三': '883838', '巴三3号': '33838', '吴大三': '3249-12312',
- '路飞': '6666-6666', '小三': '88393992', '小瘪三2号': '93992',
- '小瘪三3号': '68393992', '王': '88-88'}
- 初选(telbook) #进入主程序
复制代码
【程序运行结果】
|--------欢迎进入通讯录程序--------|
|--------1.列出通讯录名单--------|
|--------2.查增联系人资料--------|
|--------3.增改联系人资料--------|
|--------4.删除已有联系人--------|
|--------5.退出通讯录程序--------|
【主程序】请输入操作指令:
(1.列举,2.查增,3.增改,4.删,5.退出程序):1
【王二小: 1864211242 】 【王三贵: 999-2 】 【巴倒烫: 21444-242 】 【巴三: 883838 】 【巴三3号: 33838 】
【吴大三: 3249-12312 】 【路飞: 6666-6666 】 【小三: 88393992 】 【小瘪三2号: 93992 】 【小瘪三3号: 68393992 】
【王: 88-88 】
【主程序】请输入操作指令:
(1.列举,2.查增,3.增改,4.删,5.退出程序):2
请输入联系人姓名:瘪三
相关联系人有:
【小瘪三2号: 93992 】 【小瘪三3号: 68393992 】
需要添加该联系人进通讯录吗(YES/NO)YES
请输入用户联系电话:9932
成功修改 瘪三 的联系方式为:9932
【主程序】请输入操作指令:
(1.列举,2.查增,3.增改,4.删,5.退出程序):1
【王二小: 1864211242 】 【王三贵: 999-2 】 【巴倒烫: 21444-242 】 【巴三: 883838 】 【巴三3号: 33838 】
【吴大三: 3249-12312 】 【路飞: 6666-6666 】 【小三: 88393992 】 【小瘪三2号: 93992 】 【小瘪三3号: 68393992 】
【王: 88-88 】 【瘪三: 9932 】
【主程序】请输入操作指令:
(1.列举,2.查增,3.增改,4.删,5.退出程序):4
请输入需要删除的联系人:瘪三
联系人:瘪三删除成功!
【主程序】请输入操作指令:
(1.列举,2.查增,3.增改,4.删,5.退出程序):1
【王二小: 1864211242 】 【王三贵: 999-2 】 【巴倒烫: 21444-242 】 【巴三: 883838 】 【巴三3号: 33838 】
【吴大三: 3249-12312 】 【路飞: 6666-6666 】 【小三: 88393992 】 【小瘪三2号: 93992 】 【小瘪三3号: 68393992 】
【王: 88-88 】
【主程序】请输入操作指令:
(1.列举,2.查增,3.增改,4.删,5.退出程序):5
|---感谢使用该通讯录程序---| |
|