时间:2026-03-22 14:44
人气:
作者:admin
在编程的学习路径中,最有趣的时刻往往不是背诵语法,而是看着一行行代码逐渐演变成一个真正可用的“工具”。今天,我们将通过四个版本的迭代,从零开始构建一个“联系人电话查询系统”。
这不仅仅是一个简单的练习,我们将亲身体验软件开发的完整生命周期:
- V1.0 原型版:利用字典与循环,实现最基础的查询。
- V2.0 功能版:引入增删改查(CRUD),让数据“活”起来。
- V3.0 重构版:使用函数封装,从“脚本”走向“工程化”。
- V4.0 健壮版:添加异常处理,打造坚不可摧的系统。
准备好了吗?让我们开始这场代码进化之旅!
V1.0 原型版:初识字典与遍历
万事开头难,但Python的字典(Dictionary)让数据存储变得异常简单。字典是键值对(Key-Value)的集合,天然适合存储“姓名”到“电话号码”的映射关系。
核心思路:
- 建立一个静态字典存储数据。
- 使用input()获取用户输入。
- 使用for循环遍历字典,比对姓名。
--- V1.0 基础版本 ---
1. 准备数据
contact_db = {
"张三": "13800138001",
"李四": "13900139002",
"王五": "13700137003",
"赵六": "13600136004"
}
2. 获取输入
query = input("请输入要查询的姓名:")
3. 查找逻辑 (使用For循环)
found = False
for name, phone in contact_db.items():
if name == query:
print(f" 找到了!{name}的电话号码是:{phone}")
found = True
break # 找到后立即退出循环
4. 处理未找到的情况
if not found:
print(" 抱歉,通讯录中没有这个人。")
技术点拨:
在V1.0中,我们使用了contact_db.items(),这允许我们在循环中同时拿到“键”(姓名)和“值”(电话)。虽然对于简单的查询,直接使用if query in contact_db更高效,但使用for循环是理解“遍历”这一核心编程概念的最佳起点。
V2.0 功能版:实现增删改查
V1.0只能查,数据还是写死的。一个真正的系统应该允许用户管理数据。我们需要实现增(Add)、删(Delete)、改(Update)、查(Search)以及退出(Exit)功能。
优化点:
- 引入while True构建主循环,让程序持续运行。
- 使用if-elif-else构建菜单系统。
--- V2.0 功能增强版 ---
contact_db = {
"张三": "13800138001",
"李四": "13900139002",
"王五": "13700137003",
"赵六": "13600136004"
}
print("=== 联系人管理系统 V2.0 ===")
while True:
print("n1. 查询电话 2. 添加联系人 3. 修改电话 4. 删除联系人 5. 退出")
choice = input("请选择功能 (1-5): ")
if choice == '1': # 查询
query = input("请输入姓名:")
if query in contact_db:
print(f" {query}的电话是:{contact_db[query]}")
else:
print(" 未找到该联系人。")
elif choice == '2': # 添加
name = input("请输入新姓名:")
phone = input("请输入电话:")
if name in contact_db:
print("️ 联系人已存在,请使用修改功能。")
else:
contact_db[name] = phone
print(" 添加成功!")
elif choice == '3': # 修改
name = input("请输入要修改的姓名:")
if name in contact_db:
new_phone = input("请输入新的电话:")
contact_db[name] = new_phone
print(" 修改成功!")
else:
print(" 联系人不存在。")
elif choice == '4': # 删除
name = input("请输入要删除的姓名:")
if name in contact_db:
del contact_db[name] # 使用del关键字删除键
print(" 删除成功!")
else:
print(" 联系人不存在。")
elif choice == '5': # 退出
print(" 再见!")
break
else:
print("️ 输入无效,请重新输入。")
技术点拨:
这一版本的核心在于状态管理。while True保证了程序不会执行一次就结束,而字典的增删改操作(contact_db[key] = value和del)展示了Python数据结构的灵活性。
V3.0 重构版:函数定义的魔力
V2.0的代码虽然功能齐全,但所有逻辑都堆在主循环里,显得非常臃肿(俗称“面条代码”)。如果我们要增加功能,代码将难以维护。这时候,我们需要函数。
优化点:
- 将查询、添加、删除等逻辑封装成独立的函数。
- 主程序只负责显示菜单和调用函数,逻辑清晰。
--- V3.0 函数封装版 ---
contact_db = {
"张三": "13800138001",
"李四": "13900139002",
"王五": "13700137003",
"赵六": "13600136004"
}
定义功能函数
def search_contact():
query = input("请输入姓名:")
# 使用get方法,如果键不存在返回None,避免报错
phone = contact_db.get(query)
if phone:
print(f" {query}的电话是:{phone}")
else:
print(" 未找到该联系人。")
def add_contact():
name = input("请输入新姓名:")
phone = input("请输入电话:")
contact_db[name] = phone
print(" 添加成功!")
def delete_contact():
name = input("请输入要删除的姓名:")
if name in contact_db:
del contact_db[name]
print(" 删除成功!")
else:
print(" 联系人不存在。")
def main():
print("=== 联系人管理系统 V3.0 ===")
while True:
print("n1. 查询 2. 添加 3. 删除 4. 退出")
choice = input("请选择: ")
if choice == '1':
search_contact()
elif choice == '2':
add_contact()
elif choice == '3':
delete_contact()
elif choice == '4':
print(" 再见!")
break
else:
print("️ 输入无效。")
运行主程序
if name == "main":
main()
技术点拨:
这里我们引入了def关键字来定义函数。注意在search_contact中,我使用了contact_db.get(query)。相比于直接访问contact_db[query],get方法在键不存在时不会报错,而是返回None,这是一种更优雅的Python写法(Pythonic)。
V4.0 健壮版:异常处理与输入验证
现在的系统看起来很美,但如果你在选择菜单时输入了字母“a”,或者在需要输入数字的地方输入了文字,程序可能会抛出ValueError并直接崩溃。为了让系统达到“专业级”,我们需要异常处理。
优化点:
- 使用try-except捕获潜在错误。
- 增加输入验证,防止程序因非法输入而闪退。
--- V4.0 健壮性增强版 ---
contact_db = {
"张三": "13800138001",
"李四": "13900139002",
"王五": "13700137003",
"赵六": "13600136004"
}
def search_contact():
query = input("请输入姓名:")
phone = contact_db.get(query)
if phone:
print(f" {query}的电话是:{phone}")
else:
print(" 未找到该联系人。")
def add_contact():
try:
name = input("请输入新姓名:")
if not name: raise ValueError("姓名不能为空")
phone = input("请输入电话:")
if not phone: raise ValueError("电话不能为空")
contact_db[name] = phone
print(" 添加成功!")
except ValueError as e:
print(f"️ 输入错误:{e}")
def main():
print("=== 联系人管理系统 V4.0 (Pro) ===")
while True:
try:
print("n1. 查询 2. 添加 3. 删除 4. 退出")
choice = input("请选择功能编号: ")
# 简单的输入验证
if choice not in ['1', '2', '3'