正如我刚才所说,我正在编写一款井字游戏,并且出现了一个我仍然无法修复的错误。错误本身包括检查玩家是否赢了。它没有显示一个明确的错误消息,但它只是没有按我想要的方式工作。
我首先列出了所有不同的获胜可能性。它们看起来像这样:
gridwintest = [[True, True, True,
None, None, None,
None, None, None],
[None, None, None,
True, True, True,
None, None, None],
[None, None, None,
None, None, None,
True, True, True],
[True, None, None,
True, None, None,
True, None, None],
[None, True, None,
None, True, None,
None, True, None],
[None, None, True,
None, None, True,
None, None, True],
[True, None, None,
None, True, None,
None, None, True],
[None, None, True,
None, True, None,
True, None, None],
]
处理它们的函数如下所示:
def check_grid(grid,check):
global gridwintest
gridvl = []
for item in grid:
if item == check:
gridvl.append(True)
else:
gridvl.append(None)
correct = True
for chkgrid in gridwintest:
for i in range(len(chkgrid)-1):
if not (chkgrid[i] == gridvl[i] or chkgrid[i] == None):
correct = False
return correct
使用该函数的代码是:
if check_grid(gridvl, invcurrmode):
print("You won, "+currmode+"!")
quit()
elif check_grid(gridvl, currmode):
print("Try again, "+currmode+".")
quit()
但是返回的"check_grid"函数总是false,即使我记录了函数内每一行的输出,看起来它实际上应该是true。
您可以通过减少
来简化一些。correct = True
for chkgrid in gridwintest:
for i in range(len(chkgrid)-1):
if not (chkgrid[i] == gridvl[i] or chkgrid[i] == None):
correct = False
for chkgrid in gridwintest:
if chkgrid == gridvl:
return True
return False
因为Python允许与==
进行有序列表比较。
那应该也能解决你的bug。not (chkgrid[i] == None)
将在每个获胜网格的三个True
值中的任何一个上评估为True
。