Код:
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 является одной (если я читаю это право), вызывая ошибку. Но если я знаю это правильно, назначение позиций разрешено в списках, и я создаю локальную копию "платы" для моей функции, чтобы я мог переназначить значения и еще что-то в функции...
Приветствуется любой вход. Это мой первый серьезный фрагмент кода, поэтому, если рассматриваемая функция выглядит слишком искаженной.
Проблема здесь:
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
.
В строке 120 вы переназначите плату до EMPTY
(т.е. пустую строку). Итак, с этого момента плата больше не является списком, поэтому вы не можете назначить board[i]
. Не совсем уверен, что вы хотели там сделать.
Как правило, ваш код значительно выиграет от использования объектной ориентации - с помощью Board в качестве класса, отслеживая его квадраты элементов.
Похож, что board
- это строка. Я получаю ту же ошибку, когда я это делаю:
>>> s = ''
>>> s[1] = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment