代码简化咨询及4阶幻方矩阵判断函数开发需求
判断4×4幻方矩阵的Python实现及代码简化思路
首先,针对你的需求,我先给出一个简洁的实现,然后再聊聊代码简化的思路。
幻方判断函数的实现
我们可以利用Python的内置sum函数和生成器表达式来高效完成判断,核心逻辑是:
- 计算目标和(取第一行的和作为基准)
- 检查所有行的和是否等于目标和
- 检查所有列的和是否等于目标和
- (可选)额外验证输入确实是4×4矩阵,避免非法输入
def is_magic_square(matrix): # 先验证输入是4×4矩阵 if len(matrix) != 4 or any(len(row) != 4 for row in matrix): raise ValueError("输入必须是4×4的二维列表") target_sum = sum(matrix[0]) # 检查所有行的和 if any(sum(row) != target_sum for row in matrix): return False # 检查所有列的和:通过zip转置矩阵,然后求和判断 if any(sum(col) != target_sum for col in zip(*matrix)): return False return True
测试示例幻方矩阵
用你给出的4×4幻方矩阵来测试这个函数:
# 示例幻方矩阵 magic_matrix = [ [16, 2, 3, 13], [5, 11, 10, 8], [9, 7, 6, 12], [4, 14, 15, 1] ] print(is_magic_square(magic_matrix)) # 输出: True
代码简化思路
如果要进一步简化这个函数,可以从这几个角度入手:
- 合并行和列的检查逻辑,用一个生成器表达式同时处理行和转置后的列
- 去掉输入验证(如果能确保输入一定是4×4矩阵的话),不过不推荐,会降低代码健壮性
- 用更紧凑的写法,但要保证可读性
简化后的版本(兼顾简洁和可读性):
def is_magic_square_simplified(matrix): target = sum(matrix[0]) # 检查所有行 + 检查所有列(转置后) return all(sum(line) == target for line in matrix + list(zip(*matrix)))
注意:这个简化版本没有输入验证,如果输入不是4×4矩阵会出错,所以如果需要处理非法输入,还是建议保留输入验证部分。
另外,如果你有现有的代码,也可以贴出来,我可以帮你针对性地优化简化~
内容的提问来源于stack exchange,提问作者DOnno
相关产品推荐
相关产品推荐

