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

正如您在我的井字游戏程序中看到的那样,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

在函数的末尾,您分配EMPTYboard, butEMPTY是一个空字符串,如第 4 行所定义的那样。我假设您的意思一定是board[i] = EMPTY

于 2011-05-23T15:21:06.533 回答
4

在第 120 行,您将 board 重新分配给EMPTY(即一个空字符串)。所以从那时起, board 不再是一个列表,所以你不能分配board[i]. 不太清楚你打算在那里做什么。

通常,您的代码会从使用面向对象中受益匪浅——将 Board 作为一个类,跟踪其成员 squares。

于 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 回答