#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]. Огромное спасибо!!