注意-这不是从单个csv文件或excel文件生成csv文件,而是针对单个python模块应用程序。
我正在做一个任务,从一个Tic-Tac-Toe游戏中生成一个csv文件,所以我制作了一些原始的Python模块和主代码,在运行主代码时,运行结果的子数据临时保存了这些子数据。(a-模块,B-主要代码)。每个信息都临时存储在结构self下的“self.xxx”中。无法修改原始python模块和主代码。
A-模块
class TTT_Env():
def __init__(self):
self.state = [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
self.done = False
self.turn = 'X'
self.winner = None
def print_state(self):
for row in self.state:
print(*row)
def step(self, r, c):
if r not in [0, 1, 2] or c not in [0, 1, 2]:
print('Enter the number 0~2')
elif self.state[r][c] != '_':
print('Put your mark on the blank position!')
else:
self.state[r][c] = self.turn
tmp = self.state[0]+self.state[1]+self.state[2]
if tmp.count('_') == 0:
self.done = True
self._winner_check()
self.turn = 'O' if self.turn == 'X' else 'X'
def reset(self):
self.state = [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
self.done = False
self.turn = 'X'
self.winner = None
def _winner_check(self):
for row in self.state:
if ''.join(row) == self.turn * 3:
self.winner, self.done = self.turn, True
for col in zip(*self.state):
if ''.join(col) == self.turn * 3:
self.winner, self.done = self.turn, True
diag_1 = self.state[0][0] + self.state[1][1] + self.state[2][2]
diag_2 = self.state[0][2] + self.state[1][1] + self.state[2][0]
if diag_1 == self.turn * 3 or diag_2 == self.turn * 3:
self.winner, self.done = self.turn, TrueB-主要守则
from TTT_env import *
from game_logger import *
env = TTT_Env()
print("Game start")
history = []
env.print_state()
while not env.done:
action = input("Player %s, enter your index of your mark(compared by space):"%env.turn)
r, c = action.split(' ')
history.append(env.turn, int(r), int(c), env.done, env.winner)
env.step(int(r), int(c))
env.print_state()
logging(history)
if env.winner == None:
print("Draw.")
else:
print("The winner is player %s!"%env.winner)目标在这里;(1)我必须创建一个.csv文件,其中包含临时存储的self数据集。
(2)当原始程序结束时,我需要记录csv文件。
下面的代码是我关于目标的原型之一,它有很多错误,我知道,但请教我很多。
谢谢!
发布于 2021-12-03 08:14:49
因此,当我得到正确的答案时,我惊讶地知道没有使用读行函数,也不使用读或读行函数,这是答案代码。
import csv
import os
import datetime
def logging(history):
if not os.path.isdir("log"):
os.mkdir("log")
if not os.path.exists("log/play_log.csv"):
with open("log/play_log.csv", "w") as f:
writer = csv.writer(f, delimiter=',', quotechar='"')
header = ["step", "player", "row", "column", "done", "winner"]
writer.writerow(header)
with open("log/play_log.csv", "a") as f:
writer = csv.writer(f, delimiter=',', quotechar='"')
for i, p_r_c_d_w in enumerate(history):
s_p_r_c_d_w = [i+1] + p_r_c_d_w
writer.writerow(s_p_r_c_d_w)
writer.writerow([str(datetime.datetime.now())])首先,我必须通过检查os.path.isdir语句来创建路径目录。如果目录未声明,则必须使用os.mkdir语句创建一个目录。
然后,使用一个子.csv文件'play_log.csv‘,我必须创建一个分隔符,当然,还必须创建一个标头来比较后续的数据集。我也必须把它写在.csv文件上。
这段代码的最后一部分表示我们应该为历史日志的数据集留出空间--将历史数据分发给p_r_c_d_w,并通过使步骤(I)在代码工作时手动添加1来比较最新的记录。
对于第二条,我们应该写一个写字的声明。
https://stackoverflow.com/questions/70185670
复制相似问题