我正忙着尝试在Python 3.5中编写Minesweeper版本,而我在这里的代码旨在查看我作为游戏板创建的二维数组中的每个值,并查看有多少地雷(由" O"表示)围绕着它。它有效,但我觉得代码太笨重了。 python中是否有一个函数可以执行此操作,或者是否有可以编写的函数可以简化它?
if语句首先要检查数值是否在数组中,以免超出范围,然后检查位置。
for x in range(len(array)):
for y in range(len(array[0])):
if array[x][y] != "O":
counter = 0
if (x - 1 >= 0) and (array[x-1][y] == "O"):
counter += 1
if (x + 1 < len(array)) and (array[x+1][y] == "O"):
counter += 1
if (y - 1 >= 0) and (array[x][y+1] == "O"):
counter += 1
if (y + 1 < len(array)) and (array[x][y+1] == "O"):
counter += 1
if (x - 1 >= 0) and (y - 1 >= 0) and (array[x-1][y-1] == "O"):
counter += 1
if (x - 1 >= 0) and (y + 1 < len(array)) and (array[x-1][y+1] == "O"):
counter += 1
if (x + 1 < len(array)) and (y - 1 >= 0) and (array[x+1][y-1] == "O"):
counter += 1
if (x + 1 < len(array)) and (y + 1 < len(array)) and (array[x+1][y+1] == "O"):
counter += 1
array[x][y] = counter
答案 0 :(得分:1)
在array [x] [y]!= 0
之后尝试此函数def checkNeighbours(x,y,matrix):
neighbourValues = [matrix[x_][y_] for x_ in range(x-1,x+2) for y_ in range(y-1,y+2)
if (0 <= x_ < len(matrix) and 0 <= y_ < len(matrix) and (x_ != x or y_ != y))]
return neighbourValues.count('O')
答案 1 :(得分:1)
一个可能的基于numpy的解决方案就是这样的。检查评论以确保您了解他们正在做什么:
JSONDict
结果如下:
class ClazzB(Base):
key = Column(Unicode)
@property
def attributeB(self):
return self.objectA.attributeA[self.key]