Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数字Tic-Tac-Toe获胜条件_Python_Python 3.x_Tic Tac Toe - Fatal编程技术网

Python 数字Tic-Tac-Toe获胜条件

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

这是一个数字井字游戏。我试着将获胜的条件,即一行、一列或一条对角线加起来等于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

创建二维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。分析我的建议并使之适应你的需要。