如何基于不可修改的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
相关产品推荐
相关产品推荐

