鱼C论坛

 找回密码
 立即注册
查看: 1921|回复: 0

[技术交流] 【老版第25讲字典】升级版查改通讯录程序

[复制链接]
发表于 2021-2-6 23:15:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
[课后作业] 第025讲:字典:当索引不好用时 | 课后测试题

利用字典的特性编写一个通讯录程序:

  1. def 输入正确(n,*tuple1):
  2.     """
  3.     输出一个符合条件的字符串
  4.     :param n=str input中需写入说明话语
  5.     :param tuple1:元祖集
  6.     :return: 返回符合条件的字符串
  7.     """
  8.     string = input('%s'%n) #n为说明

  9.     # 如果输入为空或者不在tuple1内,则重新输入,知道输入正确为止
  10.     while (string=='') or string not in tuple1:
  11.         print('输入有误,请重新输入')
  12.         string =input('%s'%n)
  13.     return string


  14. def 电话输入正确():
  15.     '''
  16.     输出一个符合电话号码要求的字符串
  17.     :return: 返回符合条件的字符串
  18.     '''
  19.     n=1 #无意义,只是用来使循环跑起来可进行改进
  20.     while n:
  21.         string = input('请输入用户联系电话:')
  22.         if string =='':  #如果为空值,则重新输入
  23.             continue
  24.         else:
  25.             temp = 1  #设置判断器

  26.             #如果每一个输入字符都在规定的电话号码字符串内,则判断有效,否则重新输入
  27.             for each in range(len(string)):
  28.                 if string[each] in '1234567890-':
  29.                     temp *=1
  30.                 else:
  31.                     temp *=0
  32.         if temp ==0: #无效重新输入
  33.             print('输入有误,请重新输入')
  34.             continue
  35.         if temp ==1: #有效退出循环
  36.             break
  37.     return string  #返回输入的字符串


  38. def 初选(telbook):
  39.     '''
  40.     选择器,用于进入各项功能
  41.     :param telbook: 读入通讯录
  42.     '''
  43.     select =输入正确('\n【主程序】请输入操作指令:\n(1.列举,2.查增,3.增改,4.删,5.退出程序):','1','2','3','4','5')
  44.     while select !='5': #如果不等于退出,则一直循环
  45.         if select == '1':  # 进入罗列模块
  46.             count = 0 #设置计数器
  47.             print('')
  48.             for each in list(telbook.keys()): #将字典 键值对(项) 罗列出来
  49.                 print('【%-18s】'%(str(each)+': '+str(telbook[each])),end='')
  50.                 print('  ',end='')
  51.                 count +=1
  52.                 if (count%5) == 0: #五个一行
  53.                     print('')
  54.             print('')
  55.         if select == '2':  # 进入查询模块
  56.             查(telbook)
  57.         if select == '3':  # 进入插入模块
  58.             插(telbook)
  59.         if select == '4':  # 进入删除模块
  60.             删(telbook)
  61.         select = 输入正确('\n【主程序】请输入操作指令:\n(1.列举,2.查增,3.增改,4.删,5.退出程序):','1','2','3','4','5')
  62.     print('|---感谢使用该通讯录程序---|')
  63.     # exit()

  64. def 改(telbook,shuru):
  65.     '''
  66.     修改通讯录字典
  67.     :param telbook:读入通讯录
  68.     :param shuru: 读入KEY值
  69.     :return: 返回修改后的通讯录
  70.     '''
  71.     telbook[shuru] = 电话输入正确()
  72.     print('成功修改 %s 的联系方式为:%s'%(shuru,telbook[shuru]))
  73.     return telbook

  74. def 查(telbook):
  75.     '''
  76.     查询通讯录
  77.     :param telbook: 读入通讯录
  78.     :return: 返回通讯录,因未作修改,可不返回
  79.     '''
  80.     cun = [0]  #预设一个条件存储器,初始值非空即可
  81.     while cun != []: #当存储器为空(即无一个字符在通讯录键值里)时,退出循环
  82.         cun =[] #清空存储器,准备存储符合条件的键值
  83.         shuru = input('\n请输入联系人姓名:')
  84.         result = telbook.get(shuru, '查无此人')
  85.         keys = list(telbook.keys())  # 读入通讯录姓名列表
  86.         for each in keys:  # 进行判断,如果有联系人姓名包含有输入字符,则把该姓名存储进存储器,没有存储器为[]
  87.             if shuru in each:
  88.                 cun.append(each)
  89.         if cun != []:  # 如果存储器有值,则列举出所有包含输入字符的联系人姓名和电话
  90.             print('相关联系人有:')
  91.             count = 0
  92.             for each in cun:
  93.                 print('【%-18s】' % (each + ': ' + telbook[each]), end=' ')
  94.                 count += 1
  95.                 if count % 5 == 0: print('')  # 每5个1行
  96.             print('')
  97.         if result == '查无此人': #如果联系人姓名不在通讯录中
  98.             isadd = 输入正确('需要添加该联系人进通讯录吗(YES/NO)', 'YES', 'NO') #是否将该字符录入进通讯录
  99.             if isadd == 'YES':
  100.                 return 改(telbook,shuru) #进入改()函数
  101.             else:
  102.                 continue  #进行再次查询
  103.         else: #如果输入值与通讯录中联系人姓名完全匹配,则输出对应的键值对(项)
  104.             print('\n你查找的联系人信息如下:\n',shuru,telbook[shuru])
  105.             return telbook
  106. def 插(telbook):
  107.     shuru = input('请输入需要新添加的联系人姓名:')
  108.     if telbook.get(shuru,'没有这人') =='没有这人':
  109.         number =电话输入正确()
  110.         telbook.setdefault(shuru,number)
  111.         print("成功将 %s :%s 加入到通讯录中"%(shuru,number))
  112.         return  telbook
  113.     else:
  114.         print('你输入的姓名在通讯录已存在-->>',shuru,':',telbook[shuru])
  115.         isadd = 输入正确('是否修改用户资料(YES/NO):','YES','NO')
  116.         if isadd == 'YES':
  117.             return 改(telbook,shuru) #进入改写模块

  118. def 删(telbook):
  119.     shuru =input('请输入需要删除的联系人:')
  120.     if shuru in telbook:
  121.         telbook.pop(shuru)
  122.         print('联系人:%s删除成功!\n'%(shuru))
  123.     else:
  124.         print(shuru,'不在通讯录中')




  125. a=[0]*6
  126. a[0]='欢迎进入通讯录程序'
  127. a[1]='1.列出通讯录名单'
  128. a[2]='2.查增联系人资料'
  129. a[3]='3.增改联系人资料'
  130. a[4]='4.删除已有联系人'
  131. a[5]='5.退出通讯录程序'
  132. i = 0
  133. for each in a:
  134.     a[i]='|'+each.center(25,'-')+'|'
  135.     print(a[i])
  136.     i +=1
  137. telbook={'王二小': '1864211242', '王三贵': '999-2', '巴倒烫': '21444-242',
  138. '巴三': '883838', '巴三3号': '33838', '吴大三': '3249-12312',
  139. '路飞': '6666-6666', '小三': '88393992', '小瘪三2号': '93992',
  140. '小瘪三3号': '68393992', '王': '88-88'}
  141. 初选(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
|---感谢使用该通讯录程序---|
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 04:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表