我正在尝试构建一个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中并且处于非常基本的水平,所以简单性最好。 (也请不要试着让它更短或跑得更快。我只是想知道我犯了什么错误,所以我可以从中学到。)非常感谢你!
答案 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
'':或使用单独的函数代替空格