Показанные строки указывают точно что и где не так. Вам просто нужно знать, как это интерпретировать:
18 position = player_choice(the_board)
---> 19 place_marker(the_board,Player1_marker,position)
1 def place_marker(board, marker, position):
----> 2 board[position] = marker
TypeError: list indices must be integers or slices, not NoneType
Что вы можете почерпнуть из всего этого:
- переменная
position
, используемая в строке 2 place_marker()
установлен на None
, поскольку это фактическая ошибка (переменные, установленные на None
, относятся к типу NoneType
, а position
- это индекс списка, на который жалуются); - эта переменная
position
инициализируется из переменной с тем же именем, как часть вызова place_marker()
в строке 19, поэтому она также должна быть установлена на None
; - , что переменная (та, что была передана) пришла из функции
player_choice()
.
Другими словами, ваша строка:
position = player_choice(the_board)
по какой-то причине вернула None
.
К сожалению, поскольку вы не показали нам этот код для этой функции, мы не можем углубиться в анализ, но вы можете посмотреть для путей в этой функции, которые возвращают без значения. Это типичная причина, по которой функции возвращают None
, например:
def fn(x):
if x == 1:
return 7 # This path returns 7 when 1 is passed in.
# This path returns None (implicitly) for any other value.
print(fn(1)) # Explicitly gets 7.
print(fn(2)) # Implicitly gets None.
Результат выполнения этого кода, согласно комментариям:
7
None