Помогите с решением лабораторной задачи

Объясните, пожалуйста, как можно подробнее решение данной задачи

Задача "Сапёр"

На поле для игры в сапер клеточки с минами обозначаются символом “*”, а в каждой пустой клеточке записано число от 0 до 8, равное количеству мин в 8 клетках, соседних с данной.

Дан список мин на поле. Постройте по данному списку изображение поля.

Входные данные Программа получает на вход числа NN и MM - количество строк и столбцов на поле, а также количество мин на поле KK. Далее идет KK пар чисел - координат мин. Первое число - номер строки, второе число - номер столбца.

Выходные данные Выведите изображение поля на экран, клетки при выводе разделяйте одним пробелом. введите сюда описание изображения

Решение, которое нужно подробно объяснить:

def nbr(x, y):
    ct = 0
    for i in range(x-1, x+2):
        for j in range(y-1, y+2):
            if (i>-1 and j>-1) and (i<=n-1 and j<=m-1) and a[i][j]=='*':
                ct+=1                
    return ct

n, m, k = [int(i) for i in input().split()]
a = [[0 for i in range (m)] for j in range (n)]
for i in range (k):
    x, y = [int(i) for i in input().split()]
    a[x-1][y-1] = '*'
for i in range(n):
    for j in range (m):
        if a[i][j] == '*':
            continue
        else:
            a[i][j] = nbr(i,j)
for row in a:
     print(' '.join(list(map(str, row))))

Ответы (1 шт):

Автор решения: Jack_oS

Сначала инициализируются переменные с количеством строк и столбцов поля, а также количеством мин на поле. PS переименовать бы во что-то "говорящее": rows, columns, bomb_count

n, m, k = [int(i) for i in input().split()]

Пустой список списков (заполняется нулями):

a = [[ 0 for i in range (m)] for j in range (n)]

В цикле запрашиваются координаты мин и в эти ячейки записывается "*":

for i in range (k):
    x, y =[int(i) for i in input().split()]
    a[x-1][y-1] = '*'

Обход всего поля (цикл в цикле):

for i in range(n):
    for j in range(m):
        if a[i][j] == '*':
            continue
        else:
            a[i][j] = nbr(i,j)

Здесь, если в ячейке звездочка - переходим к следующей, если нет - вызываем функцию для подсчета количества мин в восьми соседних ячейках:

def nbr(x,y):
ct = 0
for i in range(x-1, x+2):
    for j in range(y-1, y+2):
        if (i>-1 and j>-1) and (i<=n-1 and j<=m-1) and a[i][j] == '*':
            ct += 1
return ct

Построчно вывод на печать полученной матрицы:

for row in a:
    print(' '.join(list(map(str, row))))
→ Ссылка