如何使用for循环检查板中的所有值是否已满

时间:2018-04-30 01:42:41

标签: python python-3.x

我有以下代码定义了一个小板:

board[0][0]!=0 and board[0][1]!=0 and board[1][0]!=0 and board[1][1]!=0

现在我想定义一个打印的功能"电路板已经满了#34;如果def checkfortie(): for i in range(w-1): for j in range(h-1): if board[i][j]!=0: print("It's a tie!")

我的代码无效:

board[0][0]=1

即使只是board[1][0]=1Activate,代码也会打印出平局。有人可以解释为什么它不起作用吗?

2 个答案:

答案 0 :(得分:2)

为了检查平局,最好检查未归档的元素的第一种情况。这样做可以让你在确定它不是平局后立即停止检查。另一方面,每次都需要迭代整个电路板。

def checkfortie():
    for row in board:
       for square in row:
           if square == 0:
               return False # once you have found a single tile not filled, you can stop checking

    return True # loop completed without finding an open tile


if checkfortie():
   print("It's a tie")

答案 1 :(得分:1)

您的意图是集体检查所有这些,而是​​单独检查每个。

尝试这样的事情。这是一个解决方案,我尽可能少地更改了代码。

def checkfortie():
    tie = True
    for i in range(w):
        for j in range(h):
            if board[i][j] == 0:
                tie = False
    if tie:
        print("It's a tie!")

更简单的方法可能是扁平化阵列:

def checkfortie():
    return all(x == 1 for row in board for x in row)

if (checkfortie()):
    print("It's a tie!")

请注意,在原始代码中,您要从w和h中减去1。这不是必需的,实际上是在创造问题。试试这个:

for i in range(w-1):
    for j in range(h-1):
        print(i, j)

你会看到它只打印0,0

for i in range(w):
    for j in range(h):
        print(i, j)

上面的代码将打印

0 0
0 1
1 0
1 1