我正在嘗試創建一個資料庫來訓練基本的機器學習演算法。但是,當我運行代碼時,它只創建了兩行,但我正在嘗試為游戲中的每個單獨位置創建多行,并在最后對該位置進行魚干分析。代碼似乎在進行三個移動,然后為每個移動寫入檔案或覆寫檔案。我分不清是哪一個。進一步詳細說明,下面的示例是我撰寫的代碼的輸出,其中 number = 3:

但是,我正在尋找這樣的東西:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 磷 | 磷 | p | p | |||||
| 磷 | 磷 | p | p | |||||
| 磷 | 磷 | p | p |
這是我的代碼:
import chess
import chess.engine
import random
import numpy
import csv
from stockfish import Stockfish
header = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]
data = []
def create_file(number):
board = chess.Board()
moves = 0
turns = 0
black_v = 0
white_v = 0
while moves < number:
if chess.Board.is_game_over(board) == True:
chess.Board.reset()
if turns > 200:
chess.Board.reset()
for position in header:
data.append(board.piece_at(position))
with open('/content/Positions Data/position.csv', 'w', encoding='UTF8', newline='') as f:
writer = csv.writer(f)
header.append('sf')
data.append((stockfish(board, 10))/100)
writer.writerow(header)
writer.writerow(data)
data.clear()
header.pop()
turns = turns 1
moves = moves 1
random_move = random.choice(list(board.legal_moves))
board.push(random_move)
uj5u.com熱心網友回復:
正如 Camaendir 在評論中指出的那樣,您在每次移動迭代時都打開輸出檔案。這將打開覆寫任何先前資料的“用于創建”檔案。
此外,通過查看您的代碼以及您嘗試執行的操作,我發現有兩種方法可以完成您想要的操作,而您同時嘗試這兩種方法,這會產生其他問題。
打開 CSV 檔案進行寫入,并在處理板/移動時回圈寫入移動writer.writerow(stockfish(board, 10))/100):
- 打開檔案進行寫入
- 從檔案創建 csv.Writer
- 寫你的標題
- 回圈你的動作
- 處理移動/板
- 寫移動/板
- 關閉檔案
或者,處理所有附加到 的移動/棋盤data,然后打開您的 CSV 檔案并寫入資料writer.writerows(data):
- 回圈你的動作
- 處理移動/板
- 將其附加到
data
- 打開檔案進行寫入
- 從檔案創建 csv.Writer
- 寫你的標題
- 寫所有行
data - 關閉檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/397068.html
