0

ラウンド終了時にコネクトフォーのゲームの進行状況を保存するループを作ろうとしています.csvは次のようにゲームボードを表示する必要があります. 各空白スポットは '0' で表され、'O' は '2' で表され、'X' は 1 で表されます。 csv ファイルを作成すると、すべてが 1 つの列に積み上げられます。何故ですか?

        if turn == 'X':
            turn = "O"
           
        else:
            board_deepcopy = copy.deepcopy(my_board)
            ans = input('Type s to save your progress : ')
            if ans == 's':
             nop = input('Type in the name of your save file :')
             f = open(nop + '.csv', 'a', newline = '')
             writer = csv.writer(f)
             
             for y in range(board_col):
                list1 = []
                for l in range(board_col):
                 if my_board[y][l] == 'X':
                   board_deepcopy[y][l] = '1'
                   list1.append(board_deepcopy[y][l])
                   writer.writerow(list1[l])
                   
                 elif my_board[y][l] == 'O':
                  
                   
                   board_deepcopy[y][l] = '2'
                   list1.append(board_deepcopy[y][l])
                   writer.writerow(list1[l])
                  
                 else:
                  
                   board_deepcopy[y][l] = '0'
                   list1.append(board_deepcopy[y][l])
                   writer.writerow(list1[l])
           
             f.close()
            
            turn = 'X'

(1 列目に「X」、2 列目に「O」がある 8 列 8 行のボードの表示例:) Windows 端末:

      1    2    3    4    5    6    7    8
    ________________________________________
   A|' '  ' '  ' '  ' '  ' '  ' '  ' '  ' '|
   B|' '  ' '  ' '  ' '  ' '  ' '  ' '  ' '|
   C|' '  ' '  ' '  ' '  ' '  ' '  ' '  ' '|
   D|' '  ' '  ' '  ' '  ' '  ' '  ' '  ' '|
   E|' '  ' '  ' '  ' '  ' '  ' '  ' '  ' '|
   F|' '  ' '  ' '  ' '  ' '  ' '  ' '  ' '|
   G|' '  ' '  ' '  ' '  ' '  ' '  ' '  ' '|
   H| X    O   ' '  ' '  ' '  ' '  ' '  ' '|
    ---------------------------------------

csv 表示:

  A  B  C  D  E  F  G  H 
1  0
2  0
3  0
4  0
5  0
6  0
7  0
8  1
... 
16 2 
17 0
18 0
19 0
... 
64 0
4

1 に答える 1

0

あなたのforループはあなたが望むことをしていません。リストに追加していますが、新しく追加された要素を直接csv file. あなたがしたいことは、inner for loopあなたがファイルに行った後にリスト全体を保存し、outer for loop. ループを設計する方法は次のとおりです。

import csv

board_col = 4
my_board = [['X', '0', '0', '0'], 
            ['0', 'X', '0', '0'], 
            ['0', '0', 'X', '0'], 
            ['0', '0', '0', 'X']]

f = open('try.csv', 'a', newline = '')
writer = csv.writer(f)

for y in range(board_col):
    list1 = []
    for l in range(board_col):
        if my_board[y][l] == 'X':
            list1.append('1')
        elif my_board[y][l] == 'O':
            list1.append('2')
        else:
            list1.append('0')
    writer.writerow(list1)

f.close()
于 2022-01-18T14:01:45.600 に答える