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

Try this for building a two-dimensional array (a "matrix") of turns:

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])

Or simply this:

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]]

As you can see, a matrix is nothing more than a list of lists. You weren't building a matrix in the first place - the first row has to be a list too.

于 2012-06-04T11:00:18.027 に答える
2

配列のレイアウトがおかしい。最初の14個の要素は整数であり、その後に他の2つの配列が続きます。

だからあなたが基本的に持っているのはこれです:

[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]]

ご覧のとおり、そのリストの最初のいくつかの要素は単純な整数ですが、intのリストではありません。したがって、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 に答える