顺时针打印n×n螺旋网格并计算对角线元素之和的代码问题
实现目标
- 顺时针生成并打印n×n螺旋网格
- 计算网格所有对角线元素的总和,中心重合元素不重复累加
效果示例
当参数n=5时,生成的螺旋网格如下:
21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13
对应对角线求和计算:21+7+1+3+13+17+5+9+25 = 101
原有代码问题
给出的初始代码如下:
dim=5 result= n = 1 for in range(2,dim,2): for i in range(4): n+=k result+=n print(result)
存在的明确问题:
- 外层for循环缺失循环变量定义
- 累加步长变量
k未声明赋值 - 无螺旋网格生成、打印的相关逻辑
- 循环边界、累加逻辑错误,无法正确计算对角线和
- 代码缩进不规范
可运行正确实现
def generate_spiral(dim): # 初始化空网格 grid = [[0 for _ in range(dim)] for _ in range(dim)] # 四个移动方向:右、下、左、上 move_dir = [(0, 1), (1, 0), (0, -1), (-1, 0)] cur_x, cur_y = 0, 0 dir_index = 0 # 从1开始按顺时针顺序填充所有格子 for num in range(1, dim * dim + 1): grid[cur_x][cur_y] = num # 预计算下一个坐标 next_x = cur_x + move_dir[dir_index][0] next_y = cur_y + move_dir[dir_index][1] # 下一个坐标越界/已填充时,顺时针转向 if next_x < 0 or next_x >= dim or next_y <0 or next_y >= dim or grid[next_x][next_y] != 0: dir_index = (dir_index + 1) % 4 next_x = cur_x + move_dir[dir_index][0] next_y = cur_y + move_dir[dir_index][1] cur_x, cur_y = next_x, next_y # 对齐格式打印网格 num_width = len(str(dim * dim)) for row in grid: print(" ".join(f"{val:{num_width}d}" for val in row)) # 计算对角线总和 diag_sum = 0 for i in range(dim): diag_sum += grid[i][i] # 跳过中心重复元素 if i != dim - 1 - i: diag_sum += grid[i][dim - 1 -i] return diag_sum if __name__ == "__main__": n = 5 total = generate_spiral(n) print(f"\n对角线元素总和:{total}")
运行上述代码,输入n=5时会输出和示例完全一致的网格,最终对角线总和返回101,符合要求。如果需要调整网格大小,直接修改主函数里的n值即可。
内容的提问来源于stack exchange,提问作者Steve Daniel
相关产品推荐
相关产品推荐

