Как мне избавиться от этой TypeError, и почему это происходит, учитывая, что я просто переназначаю значение в списке?

1

Код:

http://pastie.org/1961455

Trackback:

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, плата [i] = компьютерная строка в функции computer_move является одной (если я читаю это право), вызывая ошибку. Но если я знаю это правильно, назначение позиций разрешено в списках, и я создаю локальную копию "платы" для моей функции, чтобы я мог переназначить значения и еще что-то в функции...

Приветствуется любой вход. Это мой первый серьезный фрагмент кода, поэтому, если рассматриваемая функция выглядит слишком искаженной.

Теги:
debugging
typeerror
tic-tac-toe

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

В конце функции вы назначаете EMPTY на board, но EMPTY - это пустая строка, как определено в строке 4. Предполагаю, что вы должны иметь в виду board[i] = EMPTY.

  • 0
    Понял! Большое спасибо, чувак. Хорошо, что я написал свой первый, очевидно, мне нужно научиться лучше читать мой код и отлаживать его, но сейчас я не жалуюсь. Спасибо всем, кто ответил.
4

В строке 120 вы переназначите плату до EMPTY (т.е. пустую строку). Итак, с этого момента плата больше не является списком, поэтому вы не можете назначить board[i]. Не совсем уверен, что вы хотели там сделать.

Как правило, ваш код значительно выиграет от использования объектной ориентации - с помощью Board в качестве класса, отслеживая его квадраты элементов.

  • 0
    Я еще не дошел до изучения классов, но спасибо. Я посмотрю на это.
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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню