如何使用 numpy 来缩短我的代码,我会检查你是否赢了
我需要找到一种方法来使用 numpy 来适应我的代码,因为它又长又难。 我检查了 diag、horizontle 和 row,但我需要找到一种方法来用 numpy 缩短它
def checkHorizontle(board):
global winner
if board[0] == board[1] == board[2] and board[1] != "-":
winner = board[0]
return True
elif board[3] == board[4] == board[5] and board[3] != "-":
winner = board[3]
return True
elif board[6] == board[7] == board[8] and board[6] != "-":
winner = board[6]
return True
def checkRow(board):
global winner
if board[0] == board[3] == board[6] and board[0] != "-":
winner = board[0]
return True
elif board[1] == board[4] == board[7] and board[1] != "-":
winner = board[1]
return True
elif board[2] == board[5] == board[8] and board[2] != "-":
winner = board[2]
return True
def checkDiag(Board):
global winner
if board[0] == board[4] == board[8] and board[0] != "-":
winner = board[0]
return True
elif board[2] == board[4] == board[6] and board[2] != "-":
winner = board[2]
return True
当我试图找到解决方案时,我的想法只是决定退出。我知道你可以用魔方找到它和 numpy 乘法函数,但我不知道怎么做
不需要numpy,可以使用简单的循环:
WINNING_TRIPLETS = [ (0, 1, 2), (3, 4, 5), ...] # add all of them
for square1, square2, square3 in WINNING_TRIPLETS:
if ...: # same logic as in your code, but only once with square1, square2, square3
假设有一个这样的棋盘并想检查
X
是否赢了:
board = np.array([['X', 'O', np.nan],
['O', 'X', np.nan],
['X', 'X', 'X']])
您可以对行、列和对角线使用 4 个测试:
# check if any row is won
(board == 'X').all(axis=1).any()
# check if any column is won
(board == 'X').all(axis=0).any()
# check diagonals
diag1 = np.diagonal(board)
diag2 = np.diagonal(np.fliplr(board))
(diag1 == 'X').all() or (diag2 == 'X').all()
在测试中使用:
if ((board == 'X').all(axis=1).any()
or (board == 'X').all(axis=0).any()
or (np.diagonal(board) == 'X').all()
or (np.diagonal(np.fliplr(board)) == 'X').all()
):
print('X won')
如果你想检查是否有玩家获胜:
# check if any row is won
(board[0] == board[1:]).all(0).any()
# check if any column is won
(board[:, [0]] == board[:, 1:]).all(1).any()
# check diagonals
diag1 = np.diagonal(board)
diag2 = np.diagonal(np.fliplr(board))
(diag1[0] == diag1[1:]).all() or (diag2[0] == diag2[1:]).all()