Как рассчитать, сколько мин поблизости? - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь добавить цифры на доску тральщика. Я следовал за некоторыми уроками, как решить это. Но мой не работает. Кто-нибудь может увидеть, чего не хватает?


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

1 Ответ

1 голос
/ 20 октября 2019

Я не могу объяснить, что не так с этим кодом, но верно следующее:

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', '*']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...