我正在完成Codefight的挑战:扫雷游戏。
游戏描述如下:
输出结果为:
游戏描述如下:
![enter image description here](https://istack.dev59.com/oyFdC.webp)
以下是我的代码:
def minesweeper(matrix):
for x in range(len(matrix)):
matrix[x].insert(0, "x")
#matrix[x].insert(len(matrix)+2, "x")
frame = ["x" for i in range(len(matrix[0]))]
matrix.insert(0, frame)
matrix.insert(len(matrix), frame)
output_matrix = [[0 for j in range(len(matrix[0]))] for i in range(len(matrix))]
for i in range(0,len(matrix[0])-1):
for j in range(0,len(matrix)-1):
if matrix[i][j] == True:
output_matrix[i][j+1] += 1 # one right
output_matrix[i+1][j] += 1 # one down
output_matrix[i][j-1] += 1 # one left
output_matrix[i-1][j] += 1 # one up
output_matrix[i+1][j+1] += 1 # one down, one right
output_matrix[i+1][j-1] += 1 # one down, one right
output_matrix[i-1][j+1] += 1 # one up, one right
output_matrix[i-1][j-1] +=1 # one up, one left
output_matrix.pop(0)
output_matrix.pop(len(output_matrix)-1)
for y in range(len(output_matrix)):
output_matrix[y].pop(0)
#output_matrix[y].pop(len(output_matrix))
return output_matrix
"x"所创建的边界是由codefight用户建议的,其目的是确保如果我的位置在矩阵的边缘,炸弹计数不会转移到另一侧。
这段代码在矩阵的最后一列放置炸弹时会出现问题,例如:
如果输入为:
[[False, False, True],
[False, False, False],
[False, False, False]]
输出结果为:
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
有人能清楚地解释一下为什么会发生这种情况吗?
如果有人能提出更好的方法来完成这个任务,我将不胜感激。
先谢谢您了。
len(matrix[0])-1
处停止以避免越界错误,但这样也会避免最后一列。你需要更细粒度的范围控制,以便在检查最后一列时仍然可以进行检查,但不会更新其右侧的任何内容。 - Silvio Mayolo