数独getSection函数代码优化求助:消除重复代码
嘿,我来帮你搞定这个数独函数的重复代码问题!
核心优化思路:动态计算子网格范围,消除硬编码重复
我猜你的原代码大概率是把每个3x3子网格的行/列范围硬编码成了多个分支(比如一堆if/elif判断x和y的取值,然后每个分支里重复写遍历逻辑)。这种写法的问题就是逻辑重复,维护起来也麻烦。
解决的关键在于:通过x和y参数动态算出子网格在整个数独里的起始行和列索引,然后用一套通用的遍历逻辑覆盖所有情况。
具体实现示例(以Python为例,思路通用)
比如原来的重复代码可能是这样的(举个典型的反例):
def getSection(grid, x, y): section = [] if x == 0 and y == 0: for i in range(3): for j in range(3): section.append(grid[i][j]) elif x == 0 and y == 1: for i in range(3, 6): for j in range(3): section.append(grid[i][j]) # 还有6个类似的elif分支,全是重复的循环代码... return section
优化后可以改成这样:
def getSection(grid, x, y): # 计算子网格的起始行、列:每个子网格占3行3列,所以起始行是y*3,起始列是x*3 start_row = y * 3 start_col = x * 3 section = [] # 用统一的循环遍历3行3列的元素 for i in range(start_row, start_row + 3): for j in range(start_col, start_col + 3): section.append(grid[i][j]) return section
进阶简化(可选)
如果是Python,还可以用列表推导式让代码更紧凑,同时保持可读性:
def getSection(grid, x, y): start_row = y * 3 start_col = x * 3 # 一行搞定遍历和收集 return [grid[i][j] for i in range(start_row, start_row+3) for j in range(start_col, start_col+3)]
额外增强:参数校验(让代码更健壮)
为了避免传入无效的x/y值(比如大于2或者负数)导致索引错误,可以加个简单的参数校验:
def getSection(grid, x, y): if not (0 <= x <= 2 and 0 <= y <= 2): raise ValueError("x和y的取值只能是0、1或2哦") start_row = y * 3 start_col = x * 3 return [grid[i][j] for i in range(start_row, start_row+3) for j in range(start_col, start_col+3)]
这样一来,不仅彻底消除了重复代码,逻辑还更清晰、代码更健壮,以后维护起来也省心多了!
内容的提问来源于stack exchange,提问作者Raysa
相关产品推荐
相关产品推荐

