Python+JSON开发D&D角色表存储应用:文件读写逻辑优化求助
D&D角色表JSON存储应用优化方案
问题背景
有Python基础,但对JSON操作不熟悉,想开发一个D&D角色表应用,用JSON存储角色数据。看过Corey Schafer的JSON模块教程仍有困惑,当前代码无法实现「角色名对应文件存在则打开,不存在则创建录入」的逻辑,且测试数据访问时遇到阻碍,需要代码优化、技术选型建议。
当前代码
#import needed packages import json #inputs character_name = input("name your character: ") #character class is not currently being used. character_class = input("enter character class: ") #data storage character_data = { 'name': character_name, 'class': character_class } with open(character_name, 'w') as f: json.dump(character_data, f) if input("would you like to see your name?") is "yes": print()
技术选型说明
JSON完全适合你的场景:
- D&D角色数据是典型的结构化键值对(姓名、职业、属性等),JSON格式天然匹配
- Python内置的
json模块能轻松完成读写操作,无需额外依赖 - JSON文件纯文本易读,方便你手动查看或修改角色数据
- 个人小应用不需要复杂数据库,JSON足够轻量高效
优化后的代码
import json import os # 获取角色名,添加.json后缀避免文件名冲突 character_name = input("请输入角色名: ") filename = f"{character_name}.json" # 判断文件是否存在 if os.path.exists(filename): # 读取现有角色数据 with open(filename, 'r') as f: character_data = json.load(f) print(f"已找到角色 {character_name},当前数据:") print(json.dumps(character_data, indent=4)) # 可选:允许用户修改角色信息 update_choice = input("是否要修改角色信息?(yes/no): ") if update_choice.lower() == "yes": new_class = input("请输入新的职业: ") character_data['class'] = new_class with open(filename, 'w') as f: json.dump(character_data, f, indent=4) print("角色信息已更新!") else: # 创建新角色并保存 character_class = input("请输入角色职业: ") character_data = { 'name': character_name, 'class': character_class, # 可扩展更多D&D属性 'strength': 10, 'dexterity': 10 } with open(filename, 'w') as f: json.dump(character_data, f, indent=4) print(f"新角色 {character_name} 已创建并保存!") # 测试数据访问:显示角色名 view_choice = input("是否要查看角色名?(yes/no): ") if view_choice.lower() == "yes": print(f"角色名: {character_data['name']}")
关键优化点说明
- 规范文件名:给文件名加上
.json后缀,避免和其他类型文件混淆,也方便识别 - 文件存在判断:用
os.path.exists()检查文件,实现「读取现有/创建新角色」的核心逻辑 - 修复字符串比较错误:原代码用
is "yes"是错误的,Python中字符串比较应该用==,同时加上.lower()兼容大小写输入 - 增强可读性:用
indent=4让保存的JSON文件格式化缩进,更易读 - 数据访问测试:完善了角色名展示的逻辑,解决你测试访问的问题
- 可扩展性:预留了添加更多D&D属性的位置,方便后续扩展功能
额外建议
- 如果后续需要管理多个角色,可以考虑用一个JSON文件存储所有角色的列表,或者用文件夹分类存放单个角色文件
- 可以添加错误处理,比如捕获
json.JSONDecodeError(处理损坏的JSON文件)、PermissionError(文件权限问题)等异常 - 不需要学习新语言,Python完全能满足你的需求,把
json模块和文件操作的基础练熟即可
内容的提问来源于stack exchange,提问作者mauxie14
相关产品推荐
相关产品推荐

