输入 数据的第一行有2个整数n, m(1 <= n, m <= 50),表示一个n * m的区域,n行m列
接下来n行每行有一个长度为m的字符串,字符串只包含2种字母,”.”和”X”
其中”.”表示这个地方不是地雷,”X”表示这个地方是地雷。
输出 请输出n行内容,每一行是一个长度为m的字符串,由数字和符号”X”组成,
如果这个点不是地雷,那么就表示这个点周围有几颗地雷,否则这个点存放符号”X”,表示这个点是地雷。
输入样例: 3 5 ..... ..XX. .....
输出样例: 01221 01XX1 01221
# 首先输入几行几列
n, m = map(int, input().split())
# 定义空列表,后边可以看到是一个二维数组
bomb = []
# 建立扫雷区域,以及设置下炸弹处
# 遍历行数次,输入每一行的内容
# 每一行都是加入一个列表,形成二维
for i in range(n):
bomb.append(list(input()))
# print(bomb) #[['.', '.', '.', '.', '.'], ['.', '.', 'X', 'X', '.'], ['.', '.', '.', '.', '.']]
# 定义一个结果二维数组,初始每个位置都是0
res = [["0" for j in range(m)] for i in range(n)]
# print(res) #[['0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0']]
# 定义函数用来对某一个位置周围的八个区域计数有几个炸弹
def check_bomb(i, j):
# 以这个位置为中心,找到九个位置
up = max(0, i - 1)
down = min(n - 1, i + 1)
left = max(0, j - 1)
right = min(m - 1, j + 1)
count = 0
for i in range(up, down + 1):
for j in range(left, right + 1):
if bomb[i][j] == 'X':
count += 1
return str(count)
# 遍历二维数组进行扫雷
for i in range(n):
for j in range(m):
if bomb[i][j] == 'X':
# 若该位置是炸弹,则结果二维数组该位置为炸弹
res[i][j] = 'X'
else:
# 若该位置不是炸弹,则调用函数检查周围八个位置有几个炸弹
# 结果放入结果二维数组该位置
res[i][j] = check_bomb(i, j)
# 输出结果
for i in res:
print(''.join(i))
运行结果:



