1

コード:

http://pastie.org/1961455

後戻り:

Traceback (most recent call last):
  File "C:\Users\COMPAQ\Desktop\NoughtsCrosses.py", line 149, in <module>
    main ()
  File "C:\Users\COMPAQ\Desktop\NoughtsCrosses.py", line 144, in main
    move = computer_move(computer, board, human)
  File "C:\Users\COMPAQ\Desktop\NoughtsCrosses.py", line 117, in computer_move
    board[i] = computer
TypeError: 'str' object does not support item assignment

私の tic-tac-toe プログラムでわかるように、computer_move 関数の board[i] = computer 行が (私がこれを正しく読んでいる場合) エラーの原因です。しかし、私がこの権利を知っていれば、アイテムの割り当てはリストで許可され、関数の「ボード」のローカルコピーを作成して、関数内で値やその他のものを再割り当てできるようにします...

どんな入力でも大歓迎です。これは私の最初の本格的なコードなので、問題の関数がめちゃくちゃに見える場合

4

3 に答える 3

5

問題はここにあります:

def computer_move (computer, board, human):
    best = (4,0,8,2,6,1,3,5,7)
    board = board [:]
    for i in legal_moves(board):
        board[i] = computer
        if winner(board) == computer:
            return i
        board = EMPTY

関数の最後で、に割り当てますがEMPTYboard4EMPTY行目で定義されているように、空の文字列ですboard[i] = EMPTY

于 2011-05-23T15:21:06.533 に答える
4

120行目で、ボードをに再割り当てしますEMPTY(つまり、空の文字列)。その時点から、ボードはリストではなくなったため、を割り当てることはできませんboard[i]。そこで何をするつもりだったのかよくわかりません。

一般に、コードはオブジェクト指向を使用することで大きなメリットが得られます。Boardをクラスとして使用し、メンバーの正方形を追跡します。

于 2011-05-23T15:21:51.247 に答える
1

文字列のように見えboardます。これを行うと同じエラーが発生します。

>>> s = ''
>>> s[1] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
于 2011-05-23T15:25:06.517 に答える