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

如何基于不可修改的Python井字棋模块运行时数据生成CSV文件

井字棋对局CSV生成解决方案

核心实现思路

  • 无需修改原有TTT环境模块和主运行代码,仅需实现主代码引入的game_logger.py模块即可满足需求
  • 对局数据会在游戏结束调用logging()函数时一次性写入CSV文件,不影响原有程序运行逻辑

前置修正(仅1处极小修改,不改变原有逻辑)

原有主代码中history.append(env.turn, int(r), int(c), env.done, env.winner)存在语法错误:Python列表的append方法仅支持传入单个参数,只需将代码修改为history.append( (env.turn, int(r), int(c), env.done, env.winner) )即可,仅增加一对括号包裹参数为元组,无其他逻辑调整。

完整game_logger.py代码

import csv

def logging(history):
    # 定义CSV表头字段
    headers = ["落子序号", "执棋方", "落子行号", "落子列号", "落子前是否结束", "落子前赢家", "最终对局结果"]
    
    # 计算最终对局结果
    final_winner = None
    for record in history:
        if record[4] is not None:
            final_winner = record[4]
    final_result = f"玩家{final_winner}胜" if final_winner else "平局"

    # 写入CSV文件
    # 模式说明:'a'为每次对局追加到历史日志末尾,改为'w'则每次运行覆盖旧日志
    with open("井字棋对局日志.csv", mode="a", newline="", encoding="utf-8-sig") as f:
        csv_writer = csv.writer(f)
        # 文件为空时先写入表头
        if f.tell() == 0:
            csv_writer.writerow(headers)
        # 逐行写入每一步落子记录
        for step_idx, record in enumerate(history, start=1):
            write_row = [step_idx, *record, final_result]
            csv_writer.writerow(write_row)

使用说明

  • 将上述代码保存为game_logger.py,和原有TTT环境模块、主运行代码放在同一目录下即可
  • 运行主代码完成一局对局后,会自动在同级目录生成井字棋对局日志.csv文件
  • 生成的CSV可直接用Excel、WPS等表格工具打开查看

内容的提问来源于stack exchange,提问作者John Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:24:07