如何计算附近有多少个地雷?

How to calculate how many mines are nearby?

我正在尝试将数字添加到扫雷板上。 我已经按照一些教程如何解决它。但是我的不工作。 有人可以看看缺少了什么吗?


    field = [['.', '.', '.', '.'], 
             ['.', '.', '*', '.'], 
             ['*', '.', '*', '.'], 
             ['*', '.', '.', '*']]
    count = 0
    row = len(field)
    col = len(field[0])
    row_range = range(row - 1, row + 2)
    col_range = range(col - 1, row + 2)
    for i in row_range:
        for j in col_range:
            if 0 <= i < len(field) and 0 <= j < len(field[0]) and field[i][j] != '.':
                count += 1
                for i in range(len(field)):
                   for j in range(len(field[0])):
                       field[i][j] = count
    return field





What I need:
 [['0', '1', '1', '1'],
  ['1', '3', '*', '2'],
  ['*', '4', '*', '3'],
  ['*', '3', '2', '*']]
What I get:
[[1, 1, 1, 1], 
 [1, 1, 1, 1], 
 [1, 1, 1, 1], 
 [1, 1, 1, 1]]

我无法解释该代码有什么问题,但以下是正确的:

import copy
import pprint

field = [['.', '.', '.', '.'], 
         ['.', '.', '*', '.'], 
         ['*', '.', '*', '.'], 
         ['*', '.', '.', '*']]

output = copy.deepcopy(field)

for i in range(len(field)):
    for j in range(len(field[0])):
        if field[i][j] != '*':
            count = 0
            for a in (-1, 0, 1):
                for b in (-1, 0, 1):
                    if (0 <= i+a < len(field) and 
                        0 <= j+b < len(field[0]) and 
                        field[i+a][j+b] == '*'): 
                        count += 1
            output[i][j] = str(count)

pprint.pprint(output, width=25)

这会打印:

[['0', '1', '1', '1'],
 ['1', '3', '*', '2'],
 ['*', '4', '*', '3'],
 ['*', '3', '2', '*']]