当前位置:   article > 正文

Python 用嵌套字典实现手机通讯录(详解版)_1.字典的应用:创建通讯录

1.字典的应用:创建通讯录

一、先搭建一个框架。有条理地把要实现的功能罗列出来!

  1. # 定义一个字典用于暂存信息(程序结束,数据删除)
  2. contacts = dict()
  3. input_buf = '请输入序号:'
  4. while True:
  5. # 打印菜单界面
  6. print(f''' {"="*8}手机通讯录{"="*8}
  7. 1.添加联系人\t\t2.查看联系人
  8. 3.删除联系人\t\t4.修改联系人
  9. 5.查找联系人\t\t0.退出''')
  10. # 选择菜单
  11. choice_menu = input(input_buf)
  12. input_buf = '请输入序号:'
  13. # 防止输入非范围内的字符
  14. if choice_menu not in tuple('012345'):
  15. input_buf = '请重新输入序号:'
  16. continue
  17. # 1.添加联系人 ============================
  18. elif choice_menu == '1':
  19. print(1)
  20. # 2.查看联系人 ============================
  21. elif choice_menu == '2':
  22. print(2)
  23. # 3.删除联系人 ============================
  24. elif choice_menu == '3':
  25. print(3)
  26. # 4.修改联系人 ============================
  27. elif choice_menu == '4':
  28. print(4)
  29. # 5.查找联系人 ============================
  30. elif choice_menu == '5':
  31. print(5)
  32. # 0.退出 ============================
  33. else:
  34. print(f'{"="*6}已退出手机通讯录{"="*6}')
  35. break

运行结果:

  1. ========手机通讯录========
  2. 1.添加联系人 2.查看联系人
  3. 3.删除联系人 4.修改联系人
  4. 5.查找联系人 0.退出
  5. 请输入序号:1
  6. 1
  7. ========手机通讯录========
  8. 1.添加联系人 2.查看联系人
  9. 3.删除联系人 4.修改联系人
  10. 5.查找联系人 0.退出
  11. 请输入序号:9
  12. ========手机通讯录========
  13. 1.添加联系人 2.查看联系人
  14. 3.删除联系人 4.修改联系人
  15. 5.查找联系人 0.退出
  16. 请重新输入序号:a
  17. ========手机通讯录========
  18. 1.添加联系人 2.查看联系人
  19. 3.删除联系人 4.修改联系人
  20. 5.查找联系人 0.退出
  21. 请重新输入序号:0
  22. ======已退出手机通讯录======

二、有序实现具体功能。根据项目要求编写代码

1.添加联系人

  1. # 1.添加联系人 ============================
  2. elif choice_menu == '1':
  3. print(f' {"=" * 8}添加联系人{"=" * 8}')
  4. # 防止输入空字符和首字符空格' '(无法防止多个空格输入)
  5. while True:
  6. name = input('请输入名字:')
  7. if name != '' and name != ' ':
  8. break
  9. while True:
  10. phone = input('请输入手机号码:')
  11. if phone != '' and phone != ' ':
  12. break
  13. while True:
  14. email = input('请输入邮箱:')
  15. if email != '' and email != ' ':
  16. break
  17. while True:
  18. address = input('请输入地址:')
  19. if address != '' and address != ' ':
  20. break
  21. keys_name += 1
  22. # 数据写入字典
  23. contacts[keys_name] = {'name': name, 'phone': phone, 'email': email, 'address': address}
  24. # print(contacts)
  25. print('已保存成功')

2.查看联系人

  1. # 2.查看联系人 ============================
  2. elif choice_menu == '2':
  3. print(f' {"=" * 8}查看联系人{"=" * 8}')
  4. # 是否为空字典
  5. if contacts == dict():
  6. print('哦豁,此手机通讯录无数据!!!')
  7. continue
  8. # 遍历打印通讯录
  9. for i in contacts.values():
  10. # print(i)
  11. print(f"姓名:{i['name']}\t手机号码:{i['phone']}\t邮箱:{i['email']}\t住址:{i['address']}")

3.删除联系人

  1. # 3.删除联系人 ============================
  2. elif choice_menu == '3':
  3. print(f' {"=" * 8}删除联系人{"=" * 8}')
  4. # 是否为空字典
  5. if contacts == dict():
  6. print('哦豁,此手机通讯录无数据!!!')
  7. continue
  8. name = input('请输入需要删除的名字:')
  9. name_count = 0 # 记录重名的次数
  10. keys_buf = list() # 存储重名的键值,方便字典索引
  11. # 遍历查找此人
  12. for i in contacts:
  13. if contacts[i]['name'] == name:
  14. name_count += 1 # 重名计数
  15. keys_buf.append(i) # 把找到名字的字典键值追加到列表中
  16. print(f"{name_count}.姓名:{contacts[i]['name']}\t"
  17. f"手机号码:{contacts[i]['phone']}\t"
  18. f"邮箱:{contacts[i]['email']}\t"
  19. f"住址:{contacts[i]['address']}")
  20. # 多个重名选择删除
  21. if name_count > 1:
  22. name_choice = int(input('请选择需要删除名字的序号:'))
  23. for i in range(name_count):
  24. if (name_choice-1) == i:
  25. contacts.pop(keys_buf[i]) # 删除字典元素
  26. print('已删除成功!')
  27. # 只有一个删除
  28. elif name_count == 1:
  29. contacts.pop(keys_buf[0]) # 删除字典元素
  30. print('已删除成功!')
  31. # 找不到此人
  32. else:
  33. print('此人不在通讯录,请确认输入是否有误!')

4.修改联系人

  1. # 4.修改联系人 ============================
  2. elif choice_menu == '4':
  3. print(f' {"=" * 8}修改联系人{"=" * 8}')
  4. # 是否为空字典
  5. if contacts == dict():
  6. print('哦豁,此手机通讯录无数据!!!')
  7. continue
  8. name = input('请输入需要修改的名字:')
  9. name_count = 0 # 记录重名的次数
  10. keys_buf = list() # 存储重名的键值,方便字典索引
  11. # 遍历查找此人
  12. for i in contacts:
  13. if contacts[i]['name'] == name:
  14. name_count += 1 # 重名计数
  15. keys_buf.append(i) # 把找到名字的字典键值追加到列表中
  16. print(f"{name_count}.姓名:{contacts[i]['name']}\t"
  17. f"手机号码:{contacts[i]['phone']}\t"
  18. f"邮箱:{contacts[i]['email']}\t"
  19. f"住址:{contacts[i]['address']}")
  20. # 多个重名选择修改
  21. if name_count > 1:
  22. name_choice = int(input('请选择需要修改名字的序号:'))
  23. for i in range(name_count):
  24. if (name_choice - 1) == i:
  25. # 防止输入空字符和首字符空格' '(无法防止多个空格输入)
  26. while True:
  27. new_name = input('请输入新的名字:')
  28. if new_name != '' and new_name != ' ':
  29. break
  30. while True:
  31. new_phone = input('请输入新的手机号码:')
  32. if new_phone != '' and new_phone != ' ':
  33. break
  34. while True:
  35. new_email = input('请输入新的邮箱:')
  36. if new_email != '' and new_email != ' ':
  37. break
  38. while True:
  39. new_address = input('请输入新的地址:')
  40. if new_address != '' and new_address != ' ':
  41. break
  42. # 新数据覆盖字典
  43. contacts[keys_buf[i]] = {'name': new_name, 'phone': new_phone,
  44. 'email': new_email, 'address': new_address}
  45. # print(contacts)
  46. print('已修改成功')
  47. # 只有一个删除
  48. elif name_count == 1:
  49. # 防止输入空字符和首字符空格' '(无法防止多个空格输入)
  50. while True:
  51. new_name = input('请输入新的名字:')
  52. if new_name != '' and new_name != ' ':
  53. break
  54. while True:
  55. new_phone = input('请输入新的手机号码:')
  56. if new_phone != '' and new_phone != ' ':
  57. break
  58. while True:
  59. new_email = input('请输入新的邮箱:')
  60. if new_email != '' and new_email != ' ':
  61. break
  62. while True:
  63. new_address = input('请输入新的地址:')
  64. if new_address != '' and new_address != ' ':
  65. break
  66. # 数据覆盖字典
  67. contacts[keys_buf[0]] = {'name': new_name, 'phone': new_phone,
  68. 'email': new_email, 'address': new_address}
  69. # print(contacts)
  70. print('已修改成功')
  71. # 找不到此人
  72. else:
  73. print('此人不在通讯录,请确认输入是否有误!')

5.查找联系人

  1. # 5.查找联系人 ============================
  2. elif choice_menu == '5':
  3. print(f' {"=" * 8}查找联系人{"=" * 8}')
  4. # 是否为空字典
  5. if contacts == dict():
  6. print('哦豁,此手机通讯录无数据!!!')
  7. continue
  8. name = input('请输入需要查找的名字:')
  9. name_count = 0 # 记录重名的次数
  10. # 遍历查找此人
  11. for i in contacts:
  12. if contacts[i]['name'] == name:
  13. name_count += 1 # 重名计数
  14. print(f"{name_count}.姓名:{contacts[i]['name']}\t"
  15. f"手机号码:{contacts[i]['phone']}\t"
  16. f"邮箱:{contacts[i]['email']}\t"
  17. f"住址:{contacts[i]['address']}")
  18. # 找不到此人
  19. if name_count == 0:
  20. print('此人不在通讯录,请确认输入是否有误!')

三、代码汇总。实现完整的功能

  1. """
  2. 用字典模拟手机通讯录
  3. 知识点:
  4. 1、嵌套字典使用
  5. 2、字典增删改查
  6. 3、嵌套循环/条件语句/跳转语句
  7. 4、数据类型转换/元素索引
  8. 改善与不足:
  9. 1、代码块很臃肿,有很多重复的代码,如果使用函数就能避免
  10. 2、在多个重名选择输入序号时,没有做限制
  11. 3、程序结束,数据删除,无法保存
  12. """
  13. # 定义一个字典用于暂存信息(程序结束,数据删除)
  14. contacts = dict()
  15. input_buf = '请输入序号:'
  16. keys_name = 0 # 字典键值命名
  17. # 功能实现 ===========================================================
  18. while True:
  19. # 打印菜单界面
  20. print(f''' {"=" * 8}手机通讯录{"=" * 8}
  21. 1.添加联系人\t\t2.查看联系人
  22. 3.删除联系人\t\t4.修改联系人
  23. 5.查找联系人\t\t0.退出''')
  24. # 选择菜单
  25. choice_menu = input(input_buf)
  26. input_buf = '请输入序号:'
  27. # 防止输入非范围内的字符
  28. if choice_menu not in tuple('012345'):
  29. input_buf = '请重新输入序号:'
  30. continue
  31. # 1.添加联系人 ====================================================
  32. elif choice_menu == '1':
  33. print(f' {"=" * 8}添加联系人{"=" * 8}')
  34. # 防止输入空字符和首字符空格' '(无法防止多个空格输入)
  35. while True:
  36. name = input('请输入名字:')
  37. if name != '' and name != ' ':
  38. break
  39. while True:
  40. phone = input('请输入手机号码:')
  41. if phone != '' and phone != ' ':
  42. break
  43. while True:
  44. email = input('请输入邮箱:')
  45. if email != '' and email != ' ':
  46. break
  47. while True:
  48. address = input('请输入地址:')
  49. if address != '' and address != ' ':
  50. break
  51. keys_name += 1
  52. # 数据写入字典
  53. contacts[keys_name] = {'name': name, 'phone': phone, 'email': email, 'address': address}
  54. # print(contacts)
  55. print('已保存成功')
  56. # 2.查看联系人 ====================================================
  57. elif choice_menu == '2':
  58. print(f' {"=" * 8}查看联系人{"=" * 8}')
  59. # 是否为空字典
  60. if contacts == dict():
  61. print('哦豁,此手机通讯录无数据!!!')
  62. continue
  63. # 遍历打印通讯录
  64. for i in contacts.values():
  65. # print(i)
  66. print(f"姓名:{i['name']}\t手机号码:{i['phone']}\t邮箱:{i['email']}\t住址:{i['address']}")
  67. # 3.删除联系人 ====================================================
  68. elif choice_menu == '3':
  69. print(f' {"=" * 8}删除联系人{"=" * 8}')
  70. # 是否为空字典
  71. if contacts == dict():
  72. print('哦豁,此手机通讯录无数据!!!')
  73. continue
  74. name = input('请输入需要删除的名字:')
  75. name_count = 0 # 记录重名的次数
  76. keys_buf = list() # 存储重名的键值,方便字典索引
  77. # 遍历查找此人
  78. for i in contacts:
  79. if contacts[i]['name'] == name:
  80. name_count += 1 # 重名计数
  81. keys_buf.append(i) # 把找到名字的字典键值追加到列表中
  82. print(f"{name_count}.姓名:{contacts[i]['name']}\t"
  83. f"手机号码:{contacts[i]['phone']}\t"
  84. f"邮箱:{contacts[i]['email']}\t"
  85. f"住址:{contacts[i]['address']}")
  86. # 多个重名选择删除
  87. if name_count > 1:
  88. name_choice = int(input('请选择需要删除名字的序号:'))
  89. for i in range(name_count):
  90. if (name_choice - 1) == i:
  91. contacts.pop(keys_buf[i]) # 删除字典元素
  92. print('已删除成功!')
  93. # 只有一个删除
  94. elif name_count == 1:
  95. contacts.pop(keys_buf[0]) # 删除字典元素
  96. print('已删除成功!')
  97. # 找不到此人
  98. else:
  99. print('此人不在通讯录,请确认输入是否有误!')
  100. # 4.修改联系人 ====================================================
  101. elif choice_menu == '4':
  102. print(f' {"=" * 8}修改联系人{"=" * 8}')
  103. # 是否为空字典
  104. if contacts == dict():
  105. print('哦豁,此手机通讯录无数据!!!')
  106. continue
  107. name = input('请输入需要修改的名字:')
  108. name_count = 0 # 记录重名的次数
  109. keys_buf = list() # 存储重名的键值,方便字典索引
  110. # 遍历查找此人
  111. for i in contacts:
  112. if contacts[i]['name'] == name:
  113. name_count += 1 # 重名计数
  114. keys_buf.append(i) # 把找到名字的字典键值追加到列表中
  115. print(f"{name_count}.姓名:{contacts[i]['name']}\t"
  116. f"手机号码:{contacts[i]['phone']}\t"
  117. f"邮箱:{contacts[i]['email']}\t"
  118. f"住址:{contacts[i]['address']}")
  119. # 多个重名选择修改
  120. if name_count > 1:
  121. name_choice = int(input('请选择需要修改名字的序号:'))
  122. for i in range(name_count):
  123. if (name_choice - 1) == i:
  124. # 防止输入空字符和首字符空格' '(无法防止多个空格输入)
  125. while True:
  126. new_name = input('请输入新的名字:')
  127. if new_name != '' and new_name != ' ':
  128. break
  129. while True:
  130. new_phone = input('请输入新的手机号码:')
  131. if new_phone != '' and new_phone != ' ':
  132. break
  133. while True:
  134. new_email = input('请输入新的邮箱:')
  135. if new_email != '' and new_email != ' ':
  136. break
  137. while True:
  138. new_address = input('请输入新的地址:')
  139. if new_address != '' and new_address != ' ':
  140. break
  141. # 新数据覆盖字典
  142. contacts[keys_buf[i]] = {'name': new_name, 'phone': new_phone,
  143. 'email': new_email, 'address': new_address}
  144. # print(contacts)
  145. print('已修改成功')
  146. # 只有一个删除
  147. elif name_count == 1:
  148. # 防止输入空字符和首字符空格' '(无法防止多个空格输入)
  149. while True:
  150. new_name = input('请输入新的名字:')
  151. if new_name != '' and new_name != ' ':
  152. break
  153. while True:
  154. new_phone = input('请输入新的手机号码:')
  155. if new_phone != '' and new_phone != ' ':
  156. break
  157. while True:
  158. new_email = input('请输入新的邮箱:')
  159. if new_email != '' and new_email != ' ':
  160. break
  161. while True:
  162. new_address = input('请输入新的地址:')
  163. if new_address != '' and new_address != ' ':
  164. break
  165. # 数据覆盖字典
  166. contacts[keys_buf[0]] = {'name': new_name, 'phone': new_phone,
  167. 'email': new_email, 'address': new_address}
  168. # print(contacts)
  169. print('已修改成功')
  170. # 找不到此人
  171. else:
  172. print('此人不在通讯录,请确认输入是否有误!')
  173. # 5.查找联系人 ====================================================
  174. elif choice_menu == '5':
  175. print(f' {"=" * 8}查找联系人{"=" * 8}')
  176. # 是否为空字典
  177. if contacts == dict():
  178. print('哦豁,此手机通讯录无数据!!!')
  179. continue
  180. name = input('请输入需要查找的名字:')
  181. name_count = 0 # 记录重名的次数
  182. # 遍历查找此人
  183. for i in contacts:
  184. if contacts[i]['name'] == name:
  185. name_count += 1 # 重名计数
  186. print(f"{name_count}.姓名:{contacts[i]['name']}\t"
  187. f"手机号码:{contacts[i]['phone']}\t"
  188. f"邮箱:{contacts[i]['email']}\t"
  189. f"住址:{contacts[i]['address']}")
  190. # 找不到此人
  191. if name_count == 0:
  192. print('此人不在通讯录,请确认输入是否有误!')
  193. # 0.退出 ==========================================================
  194. else:
  195. print(f'{"=" * 6}已退出手机通讯录{"=" * 6}')
  196. break

运行结果:

  1. ========手机通讯录========
  2. 1.添加联系人 2.查看联系人
  3. 3.删除联系人 4.修改联系人
  4. 5.查找联系人 0.退出
  5. 请输入序号:5
  6. ========查找联系人========
  7. 哦豁,此手机通讯录无数据!!!
  8. ========手机通讯录========
  9. 1.添加联系人 2.查看联系人
  10. 3.删除联系人 4.修改联系人
  11. 5.查找联系人 0.退出
  12. 请输入序号:1
  13. ========添加联系人========
  14. 请输入名字:周华
  15. 请输入手机号码:1008611
  16. 请输入邮箱:123.com
  17. 请输入地址:广州
  18. 已保存成功
  19. ========手机通讯录========
  20. 1.添加联系人 2.查看联系人
  21. 3.删除联系人 4.修改联系人
  22. 5.查找联系人 0.退出
  23. 请输入序号:2
  24. ========查看联系人========
  25. 姓名:周华 手机号码:1008611 邮箱:123.com 住址:广州

作者:周华

创作日期:2023/9/27

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/464774
推荐阅读
相关标签
  

闽ICP备14008679号