Почему я получаю ошибку с этой строкой кода, когда логика используется в другом месте и у нее нет проблем?

#python #conways-game-of-life

Вопрос:

Я пытаюсь написать Игру жизни Конвея, и по какой-то причине в 1 строке кода появляется ошибка, хотя та же логика использовалась в другом месте кода и все в порядке.

Код:

 origin = [  [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],  [0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0],  [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1],  [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0],  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0],  [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0],  [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],  [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  [1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ]  c = origin current_cycle = 1 while current_cycle lt; (x_cycle   1):  for i in origin:  for j in i:  count = 0  x = i #X-Coordinate  y = j #Y-Coordinate  elif y == 0:  if x == 0: #Top Left Corner  if c[x   1][j] == 1:  count  = 1  if c[x][j   1] == 1:  count  = 1  if c[x   1][j   1]:  count  = 1  elif x == c[-1][-1]: #Top Right Corner  if c[x - 1][y] == 1:  count  = 1  if c[x-1][y   1] == 1:  count  = 1  if c[x][y   1] == 1:  count  = 1  else: #Top Left to Top Right  if c[x-1][y] == 1:  count  = 1  if c[x-1][y 1] == 1:  count  = 1  if c[x][y 1] == 1:  count  = 1  if c[x 1][y 1] == 1:  count  = 1  if c[x 1][y] == y:  count  = 1  

Ошибка, которую я получаю, заключается в следующем:

 line 111, in gameoflife  if c[x-1][y] == 1: TypeError: unsupported operand type(s) for -: 'list' and 'int'  

Любая помощь/совет приветствуется Спасибо!

Комментарии:

1. Откуда берется эта elif y == 0: деталь?

2. i и j не являются координатами. i является строкой и j является значением в строке. Если вам нужны координаты, это должно быть for i in range(len(origin)): и for j in range(len(origin[i])):

3. Обратите внимание, что c = origin это не создает копию сетки. Если вы измените c[x][y] , вы также будете изменять origin . Вероятно, вам следует сделать глубокую копию origin.

4. @Бармар, спасибо тебе. вы очень помогли здесь. Вещь с координатами была очень полезна для понимания, и в итоге я просто изменил свой код, чтобы использовать origin[x][y], а не c[x][y]. Огромное спасибо!!