一次完整的编程练习带你掌握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, start1): 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, encodingutf-8) as f: return json.load(f) return default_data def save_data(data): with open(DATA_FILE, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent2)六、完整代码结构图约会对象管理系统 │ ├── 数据层 │ ├── 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的你一些启发如果你有任何问题或建议欢迎在评论区留言讨论~
约会对象管理系统:从零开始的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, start1): 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, encodingutf-8) as f: return json.load(f) return default_data def save_data(data): with open(DATA_FILE, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent2)六、完整代码结构图约会对象管理系统 │ ├── 数据层 │ ├── 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的你一些启发如果你有任何问题或建议欢迎在评论区留言讨论~