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

2024-04-28 22:17:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想给扫雷艇板加上数字。 我听了一些关于如何解决这个问题的教程。但我的不行。 有人能看到少了什么吗?你知道吗


    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]]

Tags: andinfieldforlenreturnifcount
1条回答
网友
1楼 · 发布于 2024-04-28 22:17:28

我无法解释该代码的错误,但以下内容是正确的:

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', '*']]

相关问题 更多 >