编程就像搭积木,把复杂问题拆解开,就能用简单代码实现实用功能~ 今天就带大家从零开始,用 Python 制作一个能保存、能查询的电话号码簿,再也不怕联系人信息丢失啦!
一、核心原理:字典 —— 通讯录的 "数据容器"📦
想存联系人姓名和电话这种 "成对信息",Python 里的字典是最佳选择!就像现实中的电话簿,"姓名" 是查找钥匙(键 key),"电话" 是对应内容(值 value)。
字典基础用法速览
| | |
|---|
| pb = {"小明":"13800138000", "小红":"13900139000"} | |
| pb["小刚"] = "13700137000" | |
| pb["小明"] = "13800138001" | |
| del pb["小红"] | |
| print(pb["小明"]) | |
| print(pb.keys()) | |
| print(pb.values()) | |
💡 小知识点:字典的键(姓名)是唯一的,重复添加会覆盖原有信息;值(电话)可以重复哦~
二、分步实现:从基础到完整通讯录
阶段 1:简易通讯录(仅内存存储)📱
先实现最基础的功能 —— 手动输入联系人,程序运行时能看到所有信息(关闭程序后数据会消失)。
# 简易通讯录:仅内存存储pb = {} # 定义空字典存储通讯录while True: name = input("请输入联系人姓名(为空则结束):") if name.strip() == "": # 输入为空时退出输入 break phone = input("请输入联系人电话:") pb[name] = phone # 将姓名和电话存入字典print("当前通讯录:", pb)
✨ 运行效果:输入多个联系人后,会打印完整字典,比如 {'小明':'13800138000', '小刚':'13700137000'}
阶段 2:持久化存储(保存到文件)📁
想让数据永久保存?需要把字典写入文件!关键命令:open() 函数(控制文件读写)。
文件打开模式说明
带保存功能的通讯录代码
# 通讯录v2:保存到文件file = open("temp.txt", "w") # 创建/打开文件(写模式)pb = {} # 定义通讯录字典while True: name = input("请输入联系人姓名(为空则结束):") if name.strip() == "": break phone = input("请输入联系人电话:") pb[name] = phonestrpb = str(pb) # 字典转字符串(文件只能存字符串)file.write(strpb) # 写入文件file.close() # 关闭文件(必写!否则数据可能丢失)print("通讯录已保存到文件~")
阶段 3:支持追加功能(避免覆盖旧数据)
用 "r+" 模式打开文件,先读取原有数据,再添加新联系人,最后重新写入文件。
# 通讯录v3:支持追加联系人try: # 尝试读取已有文件 file = open("temp.txt", "r+") pb = eval(file.readline()) # 字符串转字典 file.seek(0) # 指针移到文件开头 file.truncate() # 清空文件(后续重新写入)except: # 文件不存在或格式错误时,创建新文件 file = open("temp.txt", "w") pb = {}# 追加新联系人while True: name = input("请输入联系人姓名(为空则结束):") if name.strip() == "": break phone = input("请输入联系人电话:") pb[name] = phone# 保存到文件file.write(str(pb))file.close()print("联系人追加成功!")
阶段 4:查询功能(按姓名查电话)🔍
从文件中读取字典数据,根据输入的姓名匹配对应的电话,用 try-except 捕捉查询错误。
# 通讯录查询功能try: file = open("temp.txt", "r") # 读模式打开文件 pb = eval(file.readline()) # 字符串转字典 while True: name = input("请输入要查询的联系人姓名(为空则结束):") if name.strip() == "": break if name in pb: # 判断姓名是否在字典中 print(f"✅ {name} 的电话:{pb[name]}") else: print(f"❌ 未找到 {name} 的联系人信息") file.close()except: print("查询出错!可能是文件不存在或格式错误~")
阶段 5:终极版!多功能整合通讯录
把添加、查询、退出功能整合,做成带菜单的完整程序,小白也能轻松使用~
# 通讯录终极版:添加+查询+退出def add_contact(): """添加联系人""" try: file = open("temp.txt", "r+") pb = eval(file.readline()) file.seek(0) file.truncate() except: file = open("temp.txt", "w") pb = {} while True: name = input("请输入联系人姓名(为空则结束):") if name.strip() == "": break phone = input("请输入联系人电话:") pb[name] = phone file.write(str(pb)) file.close() print("📥 联系人添加成功!")def search_contact(): """查询联系人""" try: file = open("temp.txt", "r") pb = eval(file.readline()) while True: name = input("请输入要查询的联系人姓名(为空则结束):") if name.strip() == "": break if name in pb: print(f"✅ {name}:{pb[name]}") else: print(f"❌ 未找到 {name} 的信息") file.close() except: print("❌ 无通讯录数据可查询!")def main(): """主程序(菜单界面)""" while True: print("\n" + "="*30) print("|---📱 欢迎进入通讯录程序---|") print("|---1. 查询联系人资料---|") print("|---2. 添加新的联系人---|") print("|---3. 退出通讯录程序---|") print("="*30) choice = input("请选择操作(1-3):") if choice == "1": search_contact() elif choice == "2": add_contact() elif choice == "3": print("👋 感谢使用,再见!") break else: print("❌ 无效选择,请输入1-3!")if __name__ == "__main__": main()
三、趣味拓展:生活中的字典应用场景🌍
除了通讯录,字典还能表示很多成对信息:
- 学号 - 姓名:
student = {101:"张三", 102:"李四"} - 省份 - 省会:
province = {"广东":"广州", "浙江":"杭州"} - 科目 - 成绩:
score = {"数学":95, "语文":88} - 单词 - 翻译:
dictionary = {"apple":"苹果", "python":"蟒蛇"}
四、常见问题排查🔧
- 文件保存后乱码?字典转字符串后写入文件,打开后显示类似
{'name':'phone'} 是正常的,程序读取时会自动转换回字典。 - 运行报错 "文件不存在"?第一次运行查询功能时,若未创建通讯录文件,会报错。先执行 "添加联系人" 功能创建文件即可。
- 添加联系人后旧数据消失?确保使用 "r+" 模式打开文件,且执行了
file.seek(0) 和 file.truncate() 步骤。
总结
今天我们用 Python 字典 + 文件操作,实现了从简易到完整的通讯录程序,掌握了:
试着运行代码,添加自己的联系人,体验编程解决实际问题的乐趣吧!如果想升级功能(比如修改、删除联系人),可以在评论区告诉我哦~ 🚀