如何统计二维网格中指定坐标周围(含自身)的字母N的数量
实现count_n函数的修复方案
原代码问题梳理
- 循环范围错误:仅遍历了给定坐标右下方的区域,没有覆盖坐标上下左右所有相邻的8个方向(含自身)
- 变量名冲突:循环变量直接复用入参
x/y,会覆盖原始输入的坐标值 - 变量未初始化:计数变量
n没有提前赋值为0,运行时会触发变量未定义报错 - 取值逻辑错误:判断条件错误对比了循环变量x和字符串"N",实际需要取网格对应位置的元素判断
正确实现代码
def count_n(x, y, room): n = 0 # 遍历坐标周围共9个可能的位置(含自身) for dy in range(y - 1, y + 2): for dx in range(x - 1, x + 2): # 边界校验:确保坐标不超出网格范围 if 0 <= dy < len(room) and 0 <= dx < len(room[dy]): if room[dy][dx] == "N": n += 1 return n # 测试用例:以坐标(2,2)为例,预期返回6 room = [['N', ' ', ' ', ' ', ' '], ['N', 'N', 'N', 'N', ' '], ['N', ' ', 'N', ' ', ' '], ['N', 'N', 'N', ' ', ' '], [' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ']] print(count_n(2, 2, room))
逻辑说明
我们要统计的是给定坐标周围(横、纵坐标差绝对值≤1)的所有有效格子,因此循环范围设置为y-1到y+1、x-1到x+1,每次循环前先校验坐标是否在网格合法范围内,避免数组越界报错。
内容的提问来源于stack exchange,提问作者Goro
相关产品推荐
相关产品推荐

