I';我对python与元组的关系有问题

I';我对python与元组的关系有问题,python,Python,我正在尝试创建一个游戏(tic-tac-toe),我必须使用3个元组创建一个棋盘(称为tab),每个元组有3个元素表示一条线上的位置。“X”由数字1表示,“O”由-1表示,空白由0表示。我试图创建一个函数,该函数接收一个参数(在本例中,board就是参数),并说明它是否代表一个有效的board,但它总是给我错误的答案(在本例中,它是false),我不知道为什么 tab = ((1, -1, 0), (0, 0, 1), (0, -1, 1)) def eh_tabuleiro(tab):

我正在尝试创建一个游戏(tic-tac-toe),我必须使用3个元组创建一个棋盘(称为
tab
),每个元组有3个元素表示一条线上的位置。“X”由数字1表示,“O”由-1表示,空白由0表示。我试图创建一个函数,该函数接收一个参数(在本例中,board就是参数),并说明它是否代表一个有效的board,但它总是给我错误的答案(在本例中,它是false),我不知道为什么

tab = ((1, -1, 0), (0, 0, 1), (0, -1, 1))

def eh_tabuleiro(tab):
    if len(tab) == 3:
        if len(tab[0]) == 3 and len(tab[1]) == 3 and len(tab[2]) == 3:
            if tab[0][0] or tab[0][1] or tab[0][2] or tab[1][0] or tab[1][1] or tab[1][2] or tab[2][0] or tab[2][1] or tab[2][2] != 1 or -1 or 0:
                return False
            else:
                return True           
            
        else:
            return False
    else:
        return False  

为了使电路板有效,它需要是一个元组,每个元组中有三个元组和三个元素。如果它有2个元素,或者不是1/-1/0,而是一个“-1”或任何其他东西,则函数返回False。正如你所看到的,我的董事会是正确的,它说它不是。有人能帮我吗?

问题在于
语句的长链。比较以下各项:

if 1或2==3:#Python将其理解为`if 1或(2==3):`
打印('oops')
#打印“哎呀”
如果(1==3)或(2==3):
打印('oops')
#不打印

关于更具可读性实施的建议:

def有效(选项卡):
如果不是isinstance(选项卡,元组):
返回错误
如果len(tab)!=三:
返回错误
对于选项卡中的行:
如果不是isinstance(行、元组):
返回错误
如果len(世界其他地区)!=三:
返回错误
对于行中的元素:
如果元素不在(-1,0,1)中:
返回错误
返回真值

不要试图发明新的语法。你(或我)能猜出预期的结果并不重要,重要的是Python能理解什么

这一行:

if tab[0][0] or tab[0][1] or tab[0][2] or tab[1][0] or tab[1][1] or tab[1][2] or tab[2][0] or tab[2][1] or tab[2][2] != 1 or -1 or 0:
之间的某个元素为
True
且整数值1或-1在布尔上下文中为True时,将立即返回True

您想知道的是,由所有值生成的集合是否是(0,1,-1)的子集。只需测试一下:

...
if (set(tab[0]) | set(tab[1]) | set(tab[2])).issubset({1, 0, -1}):
    return True
else:
    return False

你快到了。
表达式错误。对循环执行2次操作,一次用于行,另一次用于列,并检查当前位置是否与1、-1或0不同。如果
,则该大值的计算结果与您希望的不一样。用一种更为通俗的方式来表达这个条件是:
如果不是全部的话(表[i][j]在(1,-1,0)中表示i在(3)范围内表示j在(3)范围内表示))
?@Niloct:Oops我应该在写这篇文章之前喝杯咖啡!谢谢你的评论…没问题。顺便说一下,你的回答会分析整个董事会,对吗?被接受的答案将在出现问题的第一个单元格中停止。