Python 数字Tic-Tac-Toe获胜条件
这是一个数字井字游戏。我试着将获胜的条件,即一行、一列或一条对角线加起来等于15。但是,Python 数字Tic-Tac-Toe获胜条件,python,python-3.x,tic-tac-toe,Python,Python 3.x,Tic Tac Toe,这是一个数字井字游戏。我试着将获胜的条件,即一行、一列或一条对角线加起来等于15。但是,”不能更改为整数。我能做些什么来避免这种情况 以下是主要问题部分: local_board = [[ '','0','1','2'], ['0',' ',' ',' '], ['1',' ',' ',' '], ['2',' ',' ',' ']] def isWinner(self): if int(loca
”
不能更改为整数。我能做些什么来避免这种情况
以下是主要问题部分:
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
创建二维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
我很抱歉。。。但我不知道如何创造它。你能帮我吗?非常感谢,但是,不能将“”更改为整数。我能做些什么来避免这种情况?你不是最适合回答这个问题吗?毕竟是你设计了这个程序。顺便说一句,如果语句很痛苦,那么您应该真正使用循环!编写您自己的函数,该函数接受一个字符串参数,该参数检查它是否为
”
,并返回您想要的值,否则返回int(arg)
。不清楚当位置包含''
时应该返回什么值,但是…所以我只是用这个替换def部分?不,这是为了让您了解该技术。回顾您的代码,我意识到您正在使用行和列0作为标题,所以我的建议不会像现在这样起作用,因为我假设您的板是4x4。分析我的建议并使之适应你的需要。