约会对象管理系统:从零开始的Python项目实战
·
一次完整的编程练习,带你掌握Python列表、字典、文件操作和异常处理
一、项目缘起
最近沉迷《恋与深空》这款游戏,被五位男主角的魅力深深吸引。突发奇想,能不能用Python写一个“约会对象管理系统”,不仅能查看各位男主的信息,还能添加、删除、修改,甚至随机选择一位作为“一日男友”?
说干就干!这个项目不仅满足了我的小趣味,更是一次绝佳的Python综合练习。下面我就把整个开发过程分享给大家。
二、项目需求分析
一个完整的约会对象管理系统应该具备以下功能:
| 功能 | 描述 |
|---|---|
| 查看所有对象 | 以表格形式展示所有约会对象的信息 |
| 添加对象 | 输入新对象的基本信息,添加到列表中 |
| 删除对象 | 根据序号删除指定的约会对象 |
| 修改对象 | 替换指定序号的对象信息 |
| 选择对象 | 从列表中选择一位作为“一日男友” |
| 数据持久化 | 程序关闭后数据不丢失 |
三、数据结构设计
我选择了 列表嵌套字典 的数据结构:
love = [
{'name': '沈星回', 'age': 23, 'high': 185, 'evol': '光', 'career': '深空猎人'},
{'name': '秦彻', 'age': 28, 'high': 185, 'evol': '能量操控', 'career': '暗点组织首领'},
{'name': '祁煜', 'age': 24, 'high': 183, 'evol': '火', 'career': '天才艺术家'},
{'name': '黎深', 'age': 27, 'high': 186, 'evol': '冰', 'career': 'Akso医院心脏外科主任医师'},
{'name': '夏以昼', 'age': 25, 'high': 188, 'evol': '引力控制', 'career': '远空舰队执舰官'}
]
为什么这样设计?
-
列表负责管理顺序(第1个、第2个...)
-
字典负责存储每个对象的多个属性
-
访问方式:
love[0]['name']获取第1个人的名字
四、核心功能实现
1. 显示所有对象(表格对齐)
def all_lover():
print(f'{"序号":<4} {"姓名":<6} {"年龄":<4} {"身高":<4} {"evol":<6} {"职业":<12}')
for i, j in enumerate(love, start=1):
print(f'{i}号 {j["name"]:<6} {j["age"]:<4} {j["high"]:<4} {j["evol"]:<6} {j["career"]:<12}')
关键点:使用 {变量:<宽度} 实现左对齐,让表格更美观。
2. 添加约会对象
def love_1():
a = {}
name = input('请输入约会对象的名称:').strip()
age = int(input('请输入约会对象的年龄:'))
high = int(input('请输入约会对象的身高(cm):'))
evol = input('请输入约会对象的evol:').strip()
career = input('请输入约会对象的职业:').strip()
a['name'] = name
a['age'] = age
a['high'] = high
a['evol'] = evol
a['career'] = career
love.append(a)
3. 删除对象
def delete_lover(index):
deleted = love.pop(index)
print(f'成功删除:{deleted["name"]}')
4. 主程序循环
while True:
print('1.查看约会对象 2.添加对象 3.删除对象 4.修改对象 5.退出')
choice = int(input('请进行选择:'))
if choice == 1:
all_lover()
elif choice == 2:
love_1()
elif choice == 3:
all_lover()
del_num = int(input('请输入删除的号码:'))
delete_lover(del_num - 1)
elif choice == 5:
print('下次光临!')
break
五、进阶优化:异常处理与文件存储
为什么需要异常处理?
用户输入可能不是数字、可能超出范围、文件可能损坏... 如果不处理,程序会直接崩溃。
def get_valid_input(prompt, min_val, max_val):
while True:
try:
value = int(input(prompt))
if min_val <= value <= max_val:
return value
print(f"请输入 {min_val} 到 {max_val} 之间的数字")
except ValueError:
print("请输入有效的数字!")
数据持久化:保存到JSON文件
import json
import os
DATA_FILE = 'love_data.json'
def load_data():
if os.path.exists(DATA_FILE):
with open(DATA_FILE, 'r', encoding='utf-8') as f:
return json.load(f)
return default_data
def save_data(data):
with open(DATA_FILE, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
六、完整代码结构图
约会对象管理系统
│
├── 数据层
│ ├── load_data() # 从文件加载数据
│ └── save_data() # 保存数据到文件
│
├── 业务逻辑层
│ ├── all_lover() # 显示所有对象
│ ├── love_1() # 添加对象
│ ├── delete_lover() # 删除对象
│ └── modify_lover() # 修改对象
│
├── 工具函数
│ └── get_valid_input() # 输入验证
│
└── 主程序循环
└── while True # 菜单交互
七、运行效果演示
================================================== 欢迎使用约会对象选择系统 ================================================== 1.查看能选择的约会对象 2.添加约会对象 3.删除约会对象 4.修改约会对象 5.退出 请进行选择:1 序号 姓名 年龄 身高 evol 职业 1号 沈星回 23 185 光 深空猎人 2号 秦彻 28 185 能量操控 暗点组织首领 3号 祁煜 24 183 火 天才艺术家 4号 黎深 27 186 冰 Akso医院心脏外科主任医师 5号 夏以昼 25 188 引力控制 远空舰队执舰官 你要选择几号约会对象:3 祁煜 将作为你的一日男友 祝您和 祁煜 约会愉快,度过美好的一天!!!
八、项目总结与心得
学到的知识点
| 知识点 | 应用场景 |
|---|---|
| 列表与字典 | 存储多个对象及其属性 |
enumerate |
遍历时获取索引和值 |
| 格式化输出 | {:<宽度} 实现表格对齐 |
try/except |
捕获输入错误和文件异常 |
json 模块 |
数据的持久化存储 |
os.path |
检查文件是否存在 |
可以继续扩展的功能
-
随机推荐:随机选择一位作为约会对象
-
搜索功能:根据姓名或职业筛选
-
排序功能:按年龄、身高排序
-
统计功能:显示总人数、平均年龄等
-
图形界面:用
tkinter或pyqt做GUI
结语:编程的乐趣,就在于能把想法变成现实。一个小小的约会对象管理系统,既满足了兴趣,又锻炼了编程能力。希望这篇博客能给正在学习Python的你一些启发!
如果你有任何问题或建议,欢迎在评论区留言讨论~
更多推荐



所有评论(0)