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

问题描述 投票:-3回答:1

我正在尝试在扫雷板上添加数字。我已经按照一些教程来解决它。但是我的没有用。有人可以看到丢失的内容吗?


    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]]
python nested-lists
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', '*']]
© www.soinside.com 2019 - 2024. All rights reserved.