如何修复我在tictactoe gam中检查完整板的功能

2024-10-16 20:45:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图建立一个井字游戏,我有麻烦,使一个工作功能,以检查董事会是否已满。我的董事会名单是
board = [' ',' ',' ',' ',' ',' ',' ',' ',' ']
我的职能是

def fullBoard():
"""Returns a boolean value reporting the state of the board, full or not.
True for full, False for not full."""
for y in board:
    if board[y] == ' ':
        return False 
        print(False)
        break

else:
    print(True)
    return True

我要它做的是搜索列表中的每个项,当它找到一个“”或空格时,它返回false并中断循环。但如果不存在“”,则返回真值,表示电路板已满(我在试图修复该死的问题时,只是为了我的缘故才把打印函数放进去)

我原以为这样行得通,但我得到了TypeError:列表索引必须是整数或切片,而不是引用我的if board[y] == ' ':行的str。如果有人知道如何让它按照我想要的方式工作,那就太好了。另外请注意,我只在comp prog 1中,处于非常基本的水平,所以简单性最好。(也请不要试图缩短或跑得更快。我只想知道我犯了什么错误,这样我就能从中吸取教训。)非常感谢!在


Tags: the功能boardfalsetrue游戏列表for
3条回答

当您执行循环时(对于board中的y),y已经是board列表中的元素,您不需要索引它(board[y])。只需将board[y]替换为y,就可以解决您的问题了。在

你的代码是完全正确的,但是有一点。看看board怎么不是字典,而是列表?列表没有键/值对。在

下面是固定代码:

def fullBoard():
   for y in board:
       if board[y] == ' ':
           return False 
       else:
           return True

比你现在做的更容易。误解在您的for循环中。迭代列表时,y的值不是board列表中项目的索引,而是每个项目的。在

所以:

for y in board:
    if y == ' ':
        return False

return True

混淆的根源可能来自这样一个事实:当使用for循环迭代python dict时,变量(在本例中是y)实际上是字典键。然后你需要使用这个键来访问字典中那个位置的值。但那是为了字典。。你有一张单子。因此没有必要这样做。在

但还有一种更快的方法:

^{pr2}$

就这样。。没有for,没有什么。Python的in运算符告诉您某个值是否包含在列表(或某些其他类型)中。在

如果你想变得更简单。。只是:

return not ' ' in board

就这样。。只有一行代码。它的工作方式是。。' ' in board的值为True,如果board中的任何项是空格,则{}如果board中没有空格值的项。但是如果有空格,则需要False值,如果没有空格,则需要True。。因此,通过将not放在前面,您可以反转该值。。把真变成假,反之亦然。在

既然您正在学习,那么采用这种最小方法并不一定是好的,但是我想我会把它添加到我的答案中,这样您就可以更好地理解python是如何处理这些事情的。在

相关问题 更多 >