我试图编写一款井字游戏,但我遇到了这个问题

  • 本文关键字:游戏 遇到 问题 一款 python
  • 更新时间 :
  • 英文 :


正如我刚才所说,我正在编写一款井字游戏,并且出现了一个我仍然无法修复的错误。错误本身包括检查玩家是否赢了。它没有显示一个明确的错误消息,但它只是没有按我想要的方式工作。

我首先列出了所有不同的获胜可能性。它们看起来像这样:

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

编辑:一位版主在上面的评论中发布了一个很好的链接。我将强调它的底线:"在编写方法主体之前,为方法编写规范、测试用例、前置条件、后置条件和断言"。

最新更新