这是数字井字游戏。我尝试使行,列或对角线的获胜条件加起来等于15。但是,' '
不能更改为整数。我该怎么做才能避免这种情况?
这里是主要问题部分:
local_board = [[ '','0','1','2'],
['0',' ',' ',' '],
['1',' ',' ',' '],
['2',' ',' ',' ']]
def isWinner(self):
if int(local_board[1][1]) + int(local_board[1][2]) + int(local_board[1][3]) == 15\
or int(local_board[2][1]) + int(local_board[2][2]) + int(local_board[2][3]) == 15\
or int(local_board[3][1]) + int(local_board[3][2]) + int(local_board[3][3]) == 15\
or int(local_board[1][1]) + int(local_board[2][1]) + int(local_board[3][1]) == 15\
or int(local_board[1][2]) + int(local_board[2][2]) + int(local_board[3][2]) == 15\
or int(local_board[1][3]) + int(local_board[2][3]) + int(local_board[3][3]) == 15\
or int(local_board[1][1]) + int(local_board[2][2]) + int(local_board[3][3]) == 15\
or int(local_board[1][3]) + int(local_board[2][2]) + int(local_board[3][1]) == 15:
print('Player '+ self.player +' wins. Congrats!')
self.continue_game = False
代替2D列表,创建2D numpy数组。您可以用NaN替换空白空间。其他所有内容均以整数形式输入。然后,您可以使用numpy.nansum函数来计算您对计算感兴趣的总和。
这里是一些示例代码。我没有测试。
import numpy as np
local_board = [[np.nan,0,1,2],
[0,np.nan,np.nan,np.nan],
[1,np.nan,np.nan,np.nan],
[2,np.nan,np.nan,np.nan]]
local_board = np.array(local_board)
def isWinner(self):
if np.nansum(local_board[1][1] + local_board[1][2] + local_board[1][3]) == 15\
or np.nansum(local_board[2][1] + local_board[2][2] + local_board[2][3]) == 15\
or np.nansum(local_board[3][1] + local_board[3][2] + local_board[3][3]) == 15\
or np.nansum(local_board[1][1] + local_board[2][1] + local_board[3][1]) == 15\
or np.nansum(local_board[1][2] + local_board[2][2] + local_board[3][2]) == 15\
or np.nansum(local_board[1][3] + local_board[2][3] + local_board[3][3]) == 15\
or np.nansum(local_board[1][1] + local_board[2][2] + local_board[3][3]) == 15\
or np.nansum(local_board[1][3] + local_board[2][2] + local_board[3][1]) == 15:
pr'Player '+ self.player +' wins. Congrats!')
self.continue_game = False
您不希望空位计为零,因此必须将其转换为整数,以确保总和不会为15(例如-15)。这可以使用a if condition else b
构造完成:
n = int(p) if p.strip() else -15 # where p is the string value at a given position
要检查行和对角线上的总和,您可以准备一个索引列表(在平整的位置列表中,并将其用作间接添加相应板位置上的值的方法:
local_board = [['','0','1','2'],['0',' ',' ',' '],['1',' ',' ',' '],['2',' ',' ',' ']]
lines = [ [0,1,2,3], [4,5,6,7], [8,9,10,11], [12,13,14,15],
[0,4,8,12], [2,5,9,13], [2,6,10,14], [3,7,11,15],
[1,5,10,15],[3,6,9,12] ]
nums = [ int(n) if n.strip() else -15 for row in local_board for n in row ]
win = 15 in (sum(nums[p] for p in line) for line in lines)
print(win) # False