Помогите с решением лабораторной задачи
Объясните, пожалуйста, как можно подробнее решение данной задачи
Задача "Сапёр"
На поле для игры в сапер клеточки с минами обозначаются символом “*”, а в каждой пустой клеточке записано число от 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 шт):
Сначала инициализируются переменные с количеством строк и столбцов поля, а также количеством мин на поле. 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))))