大学生学Python一个月 :从零到完整可运行源码
一、项目简介本次使用 Python 基础语法 列表字典 函数封装 JSON 文件操作完成一个控制台英雄信息管理系统。实现功能查看所有英雄信息添加英雄自动去重删除英雄修改英雄定位、难度按名称查询英雄数据保存到本地 JSON 文件重新加载默认英雄数据退出自动保存二、项目技术栈列表 字典存储多条英雄数据函数封装功能模块化while 循环菜单交互系统文件读写with open 语法json 模块数据持久化保存字符串处理、遍历判断、异常捕获三、完整源码import json 数据层 DATA_FILE heroes.json 默认英雄数据覆盖王者五大位置 DEFAULT_HEROES [ {name: 吕布, position: 对抗路, difficulty: 3}, {name: 韩信, position: 打野, difficulty: 4}, {name: 妲己, position: 中路, difficulty: 2}, {name: 后羿, position: 发育路, difficulty: 2}, {name: 蔡文姬, position: 辅助, difficulty: 2}, ] def load_data(): 从本地 JSON 文件读取英雄数据文件不存在时返回默认数据 try: with open(DATA_FILE, r, encodingutf-8) as f: return json.load(f) except (FileNotFoundError, json.JSONDecodeError): return [dict(h) for h in DEFAULT_HEROES] def save_data(heroes): 把英雄列表写入本地 JSON 文件保留中文并格式化输出 with open(DATA_FILE, w, encodingutf-8) as f: json.dump(heroes, f, ensure_asciiFalse, indent2) 功能层 def show_all(heroes): 遍历列表打印所有英雄信息 print(\n * 40) for i, hero in enumerate(heroes, 1): print(f{i}. {hero[name]} | 定位{hero[position]} | 难度{hero[difficulty]}) print( * 40) def add_hero(heroes): 添加英雄自动去重 输入合法性校验 name input(请输入英雄名称).strip() if not name: print(【错误】名称不能为空) return # 遍历已有英雄重名直接拦截 for hero in heroes: if hero[name] name: print(f【错误】英雄「{name}」已存在添加失败) return position input(请输入定位如 对抗路/打野/中路/发育路/辅助).strip() if not position: print(【错误】定位不能为空) return # 难度范围检查必须是 1-5 之间的整数 try: difficulty int(input(请输入难度1-5).strip()) except ValueError: print(【错误】难度必须是数字添加失败) return if difficulty 1 or difficulty 5: print(【错误】难度必须在 1-5 之间添加失败) return heroes.append({name: name, position: position, difficulty: difficulty}) print(f英雄「{name}」添加成功) def delete_hero(heroes): 删除英雄使用 enumerate 精准定位 name input(请输入要删除的英雄名称).strip() for i, hero in enumerate(heroes): if hero[name] name: heroes.pop(i) print(f英雄「{name}」已删除) return print(f未找到英雄「{name}」) def modify_hero(heroes): 修改英雄定位、难度 name input(请输入要修改的英雄名称).strip() for hero in heroes: if hero[name] name: hero[position] input(请输入新的定位).strip() if not hero[position]: print(【错误】定位不能为空修改失败) return try: hero[difficulty] int(input(请输入新的难度1-5).strip()) except ValueError: print(【错误】难度必须是数字修改失败) return if hero[difficulty] 1 or hero[difficulty] 5: print(【错误】难度必须在 1-5 之间修改失败) return print(f英雄「{name}」修改成功) return print(f未找到英雄「{name}」) def query_hero(heroes): 按名称精准查询英雄 name input(请输入要查询的英雄名称).strip() for hero in heroes: if hero[name] name: print(f名称{hero[name]} | 定位{hero[position]} | 难度{hero[difficulty]}) return print(f未找到英雄「{name}」) def reset_data(): 一键恢复默认英雄数据 return [dict(h) for h in DEFAULT_HEROES] 主程序层 def main(): heroes load_data() while True: print(\n 英雄信息管理系统 ) print(1. 查看所有英雄) print(2. 添加英雄) print(3. 删除英雄) print(4. 修改英雄) print(5. 查询英雄) print(6. 重载默认数据) print(0. 退出并保存) choice input(请选择操作).strip() if choice 1: show_all(heroes) elif choice 2: add_hero(heroes) elif choice 3: delete_hero(heroes) elif choice 4: modify_hero(heroes) elif choice 5: query_hero(heroes) elif choice 6: heroes reset_data() print(已恢复默认英雄数据) elif choice 0: save_data(heroes) print(数据已保存再见) break else: print(无效输入请重新选择) if name main: try: main() except KeyboardInterrupt: # 强制中断时自动保存防止数据丢失 print(\n检测到强制中断正在保存数据...) save_data(load_data()) print(数据已保存再见)四、系统功能详解数据初始化程序启动自带 5 条完整英雄数据覆盖王者五大位置对抗路、打野、中路、发育路、辅助使用 列表嵌套字典 存储是 Python 最经典的结构化数据写法。数据保存功能使用 json.dump() 将列表数据写入本地文件ensure_asciiFalse 保留中文不乱码indent2 格式化输出文件整洁美观查看英雄遍历列表循环打印所有英雄信息加入分割线界面整洁。添加英雄核心亮点自动判断英雄重名遍历已有英雄重复直接拦截保证数据不重复。删除英雄使用 enumerate 同时获取下标和数据精准删除指定字典。修改英雄根据英雄名匹配直接修改字典内部 position、difficulty 字段。查询英雄精准匹配名称单独展示单个英雄信息。重载与自动保存支持一键恢复初始数据退出 / 强制中断 自动保存数据防止丢失五、项目核心知识点总结列表 字典 结构化数据存储必考函数模块化编程代码整洁易维护文件上下文 with 语句 自动关闭文件JSON 数据持久化实现数据存盘while 死循环菜单系统enumerate 遍历带下标输入处理、去空格、数据查重逻辑六、项目优点完全使用 Python 基础语法零基础也能看懂标准增删改查CRUD结构非常适合作业提交代码分层清晰数据层、功能层、主程序层自带数据校验、容错提示、自动保存七、可拓展方向可写在作业总结读取本地 JSON 文件初始化数据增加模糊查询增加难度筛选、定位筛选完善输入合法性校验优化 UI 界面八、运行效果预览1. 查看所有英雄操作步骤在主菜单输入 1 并回车。输入示例pre请选择操作1输出结果pre吕布 | 定位对抗路 | 难度3韩信 | 定位打野 | 难度4妲己 | 定位中路 | 难度2后羿 | 定位发育路 | 难度2蔡文姬 | 定位辅助 | 难度2 2. 添加英雄操作步骤在主菜单输入 2 并回车依次输入英雄名称、定位和难度。输入示例请选择操作2 请输入英雄名称孙悟空 请输入定位如 对抗路/打野/中路/发育路/辅助打野 请输入难度1-54输出结果pre英雄「孙悟空」添加成功3. 删除英雄操作步骤在主菜单输入 3 并回车输入要删除的英雄名称。输入示例pre请选择操作3 请输入要删除的英雄名称后羿输出结果pre英雄「后羿」已删除4. 修改英雄操作步骤在主菜单输入 4 并回车输入要修改的英雄名称再输入新的定位和难度。输入示例pre请选择操作4 请输入要修改的英雄名称妲己 请输入新的定位中路 请输入新的难度1-53输出结果pre英雄「妲己」修改成功5. 查询英雄操作步骤在主菜单输入 5 并回车输入要查询的英雄名称。输入示例pre请选择操作5 请输入要查询的英雄名称吕布输出结果pre名称吕布 | 定位对抗路 | 难度36. 重载默认数据操作步骤在主菜单输入 6 并回车。输入示例pre请选择操作6输出结果pre已恢复默认英雄数据7. 退出并保存操作步骤在主菜单输入 0 并回车。输入示例pre请选择操作0输出结果数据已保存再见
上一篇/下一篇内容由系统自动关联
返回资讯列表 →