我有以下代码定义了一个小板:
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]=1
和Activate
,代码也会打印出平局。有人可以解释为什么它不起作用吗?
答案 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