2
turns = [4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4]
turns.append([1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4])
turns.append([4, 6, 2, 8, 1, 9, 6, 5, 3, 7, 6, 8, 2, 4]) 
turns.append([0, 0, 26, 24, 3, 7, 5, 4, 25, 25, 21, 21, 21, 21])
turns.append([0, 0, 0, 0, 7, 3, 8, 2, 0, 0, 29, 29, 29, 29])
turns.append([0, 0, 0, 0, 26, 24, 0, 0, 0, 0, 0, 0, 0, 0])

arrayValue = turns[j][i]
    if arrayValue == turnCurrently:


Error Message:
Traceback (most recent call last):
  File "D:/a45d32f947055690c690d94f88/TicTacToe", line 183, in <module>
    arrayValue = turns[j][i]
TypeError: 'int' object is not subscriptable

我的问题本质上是,我想测试是否turns[j][i]等于turnCurrently但我一直遇到这个可下标的问题,我无法在任何我认为这是一个非常重要的问题的地方找到答案。在此先感谢,理查德

4

4 回答 4

6

试试这个来构建一个二维数组(一个“矩阵”):

turns = [[4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4]]
turns.append([1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4])
turns.append([4, 6, 2, 8, 1, 9, 6, 5, 3, 7, 6, 8, 2, 4]) 
turns.append([0, 0, 26, 24, 3, 7, 5, 4, 25, 25, 21, 21, 21, 21])
turns.append([0, 0, 0, 0, 7, 3, 8, 2, 0, 0, 29, 29, 29, 29])
turns.append([0, 0, 0, 0, 26, 24, 0, 0, 0, 0, 0, 0, 0, 0])

或者简单地说:

turns = [[4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4],
         [1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4],
         [4, 6, 2, 8, 1, 9, 6, 5, 3, 7, 6, 8, 2, 4],
         [0, 0, 26, 24, 3, 7, 5, 4, 25, 25, 21, 21, 21, 21],
         [0, 0, 0, 0, 7, 3, 8, 2, 0, 0, 29, 29, 29, 29],
         [0, 0, 0, 0, 26, 24, 0, 0, 0, 0, 0, 0, 0, 0]]

如您所见,矩阵只不过是列表的列表。你一开始并没有建立一个矩阵——第一行必须是一个列表。

于 2012-06-04T11:00:18.027 回答
2

你的阵列有一个奇怪的布局。前 14 个元素是整数,然后是其他几个数组。

所以你基本上拥有的是:

[4, 6, 2, ..., 2, 4, [1, 1, 2, ...], [4, 6, ...], ...]

您可以通过将第一个分配更改为:

turns = [[4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4]]
于 2012-06-04T11:03:07.610 回答
2

打印出变量的内容以查看发生了什么通常会很有帮助:

>>> turns
[4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4, [1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4], [0, 0, 26, 24, 3, 7, 5, 4, 25, 25, 21, 21, 21, 21], [0, 0, 0, 0, 7, 3, 8, 2, 0, 0, 29, 29, 29, 29], [0, 0, 0, 0, 26, 24, 0, 0, 0, 0, 0, 0, 0, 0]]

如您所见,该列表的前几个元素是简单整数,而不是整数列表。所以当j它很小时,它会选择一个int并尝试应用[i]它——但失败了。

这种情况下的解决方案是将第一个元素放入一个额外的列表中:

turns = [[4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4]]
turns.append( … )

另一种方法是将您的列表初始化为一个空列表,并附加第一个子列表:

turns = []
turns.append([4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4])
turns.append( … )
于 2012-06-04T11:04:05.893 回答
1

更改turns = [4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4]

turns = [[4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4]]
于 2012-06-04T11:01:49.013 回答