我正在使用Python 3.6。我对google和堆栈溢出有一个快速的了解,但是我还没有看到我的问题。问题是我的函数应该找到活动邻居的数量,但返回错误的值(但仅在某些情况下)。
这是代码:
def neighbourCount(i, j):
neighbours = 0
try:
if grid[i-1][j-1] == "1":
neighbours += 1
except:
pass
try:
if grid[i-1][j] == "1":
neighbours += 1
except:
pass
try:
if grid[i-1][j+1] == "1":
neighbours +=1
except:
pass
try:
if grid[i][j-1] == "1":
neighbours += 1
except:
pass
try:
if grid[i][j+1] == "1":
neighbours += 1
except:
pass
try:
if grid[i+1][j-1] == "1":
neighbours += 1
except:
pass
try:
if grid[i+1][j] == "1":
neighbours += 1
except:
pass
try:
if grid[i+1][j+1] == "1":
neighbours +=1
except:
pass
return(neighbours)
grid = [
["0","0","0","0","0","0","0","0","0","0"],
["0","0","1","0","0","0","0","0","0","0"],
["0","0","1","0","0","0","0","0","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","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"]
]
newGrid = [
["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","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"]
]
game = 1
while game == 1:
for i in range(0,10):
print(*grid[i], sep=' ')
numNeigh = []
for i in range(0,10):
row = []
for j in range(0,10):
neighbours = neighbourCount(i, j)
if grid[i][j] == "1" and ( neighbours>1 and neighbours<4 ):
newGrid[i][j] = "1"
if grid[i][j] == "1" and ( neighbours<2 or neighbours>3 ):
newGrid[i][j] = "0"
if grid[i][j] == "0" and neighbours == 3:
newGrid[i][j] = "1"
row.append(neighbours)
numNeigh.append(row)
for i in numNeigh:
print(i)
for i in newGrid:
print(i)
print("\n\n")
grid = newGrid
input()
这是输出(第一块:网格数组)(第二块:每个单元格具有的邻居)(第三块:newGrid数组):
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 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, 0, 0, 0, 0, 0, 0]
[1, 2, 3, 3, 2, 0, 0, 0, 0, 0]
[1, 2, 4, 2, 2, 0, 0, 0, 0, 0]
[1, 1, 2, 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, 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', '1', '0', '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']
['0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
['0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
(以上说明:我也有一个2D数组,用于“ newGrid”,它与“ grid”相同,但只有“ 0”)
中间的块显示每个位置所拥有的邻居数量,但不是在第三行下方显示“ 1、2、1、1、1、0、0 ...”,而是显示“ 1, 2,4,2,2,0,0 ...“
答案 0 :(得分:0)
您的问题可能出在创建newGrid
的那一行中。除非您正确创建grid
的副本(深层副本),否则元素将指向相同的列表(浅层副本)。因此,当您更改newGrid
时,grid
也将被更改。要正确创建网格副本,请从以下位置更改您的newGrid
行:
newGrid = grid.copy()
收件人:
newGrid = [x[:] for x in grid]
copy
方法的调用上自动创建适当的深层副本。