如何修复我在tic-tac-toe游戏中检查全板的功能

时间:2016-05-10 00:58:00

标签: python python-3.x tic-tac-toe

我正在尝试构建一个tic tac toe游戏,我在制作一个工作函数以检查电路板是否已满时遇到问题。我的董事会名单是 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并打破循环。但是如果没有''它返回true就意味着电路板已经满了(为了我的缘故,我把打印功能放在了我试图解决这个问题的时候。)

我认为这会有效但我得到TypeError:list indices必须是整数或切片,而不是str引用我的if board[y] == ' ':行。如果有人知道如何以我想要的方式工作,这将是伟大的。另外请注意我只是在comp prog 1中并且处于非常基本的水平,所以简单性最好。 (也请不要试着让它更短或跑得更快。我只是想知道我犯了什么错误,所以我可以从中学到。)非常感谢你!

4 个答案:

答案 0 :(得分:2)

它比你正在做的更容易。误解在你的 ... id: "y-axis-1", scaleLabel: { display: true, labelString: "Cost" } ... 循环中。迭代列表时,for的值不是y列表中项目的索引,而是每个项目的

所以:

board

你混淆的根源可能来自以下事实:当使用for循环迭代python dict时,变量(在本例中为for y in board: if y == ' ': return False return True )实际上是字典键。然后你需要使用密钥来访问字典中该位置的值。但这是一本字典..你有一个清单。因此不需要那样。

但是有一种更快捷的方法:

y

就是这样......没有 if ' ' in board: return False return True ,没有什么。 Python的for运算符会告诉您列表中是否包含值(或某些其他类型)。

如果你想变得更小......只是:

in

就是这样..只需一行代码。它的工作方式是.. return not ' ' in board 如果' ' in board中的任何项目是空格,则值True;如果没有值的项目,则board的值False船上的空间。但是如果有空格你想要值False,如果不是True那么......所以通过将not放在前面,你可以将值反转..使True成为False和副反之亦然。

由于你正在学习,采用这种最小化方法并不一定好,但我想我会把它添加到我的答案中,这样你就能更好地理解python如何处理这些事情。

答案 1 :(得分:1)

当你进行循环时(对于y in board),y已经是板列表中的元素,你不需要将其编入索引(board [y])。只需用y替换board [y]就可以解决问题。

答案 2 :(得分:-1)

您的代码完全正确,但一方面。看看董事会不是一本字典,而是一份清单?列表没有键/值对。

这里是固定代码:

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

答案 3 :(得分:-1)

def fullBoard(board):
    for i in range(1,10):
        if ' ' == (board,i):
             return False
     return True

'':或使用单独的函数代替空格