Показывает ошибку в коде, не могу понять, в чем проблема

board = [[1, 2, 3],[4, 5, 6],[7, 8, 9]]

def DisplayBoard(board):
  for i in range(len(board)):
   for f in range(len(board[i])) :
     print(' +-------+-------+-------+\n',
          '|       |       |       |\n',
          '|  ', board[i][0], 
          '  |  ', board[i][1], 
          '  |  ', board[i][2], '  |\n',
          '|       |       |       |')

   print(' +-------+-------+-------+')





def EnterMove(board):
  while True :
    n = input('Где нолик поставишь  ?')
    if not (int (123456789)):
      print ('pomilca')
      continue
    n = int(n)
    if n >= 1 and n <= 9 :
      if (str(board[n-1]) not in 'XO') :
       board[n-1] = board
       True
      else :
        print('zanniato')
    else :
      print('pommilca')
    break
      




DisplayBoard(board)
EnterMove(board)

Ответы (1 шт):

Автор решения: Zhihar

у вас возникает такая ситуация в строке

if (str(board[n - 1]) not in 'XO'):

если ввести число больше 3 (например, 4):

n = 4 
board = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

у вас же поле список списков 3x3, а вы обращаетесь к 4 элементу, которого нет :)

вам надо или одномерную доску от 0 до 8 сделать или число n переводить в двумерное:

x = (n - 1) % 3
y = (n - 1) // 3

а вообще я бы рефакторинг кода сделал бы

P.S.

а то что вы делаете

board[n - 1] = board

это вы в ячейку впихиваете весь свой двумерный массив со всеми вытекающими - так точно делать не надо,

→ Ссылка