You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:02:04