Python实现矩阵交替位置元素求和及通用SumPos函数编写
原有代码的核心问题
- 矩阵数据硬编码在代码中,没有封装为可复用的通用函数,无法接收任意传入的矩阵、阶数参数
- 交替位置判断仅按单行内的列索引奇偶计算,没有基于全局位置做统一判定,换不同行/列数的矩阵时计算逻辑不统一
- 代码注释存在概念混淆:把“偶位置”标注为“even numbers(偶数)”,实际计算的是位置奇偶而非数值奇偶,后续维护容易出错
- 没有输入合法性校验,传入行长度不一致的非规则矩阵时会出现计算偏差
通用实现思路
- 统一交替位置判定规则:默认和原有代码逻辑对齐,按行优先顺序从0开始给所有元素计数,序号为偶数的计入偶位置和,序号为奇数的计入奇位置和
- 封装
SumPos(matrix, order)函数,入参为目标方阵、方阵阶数,遍历完成后返回偶位置和、奇位置和两个结果 - 主程序实现用户输入交互:先接收方阵阶数,再逐行读取用户输入的数字组装为矩阵,传入函数完成计算
- 增加基础输入校验,确保每行输入的数字数量和阶数匹配,避免非法输入导致运行错误
修改后完整可运行代码
def SumPos(matrix, order): evensum = 0 # 偶位置元素和 oddsum = 0 # 奇位置元素和 for i in range(order): for j in range(order): current_val = matrix[i][j] # 计算元素行优先遍历的全局位置序号,从0开始 global_index = i * order + j if global_index % 2 == 0: print(f'偶位置元素: {current_val}') evensum += current_val else: print(f'奇位置元素: {current_val}') oddsum += current_val return evensum, oddsum # 主程序 if __name__ == "__main__": # 读取方阵阶数 order = int(input("请输入方阵阶数: ")) matrix = [] print(f"请逐行输入{order}个整数,数字间用空格分隔:") for row_num in range(order): # 读取单行输入并转为整数列表 row = list(map(int, input(f"第{row_num+1}行: ").strip().split())) # 校验输入长度 while len(row) != order: print(f"输入不合法,每行需输入{order}个数字,请重新输入") row = list(map(int, input(f"第{row_num+1}行: ").strip().split())) matrix.append(row) even_total, odd_total = SumPos(matrix, order) print(f"偶位置元素总和: {even_total}") print(f"奇位置元素总和: {odd_total}")
规则适配说明
- 如果需要的是棋盘格式交替(即上下、左右相邻元素位置属性相反,每行第一个元素的奇偶属性和上一行相反),只需要把函数内的判定条件从
global_index % 2 == 0替换为(i + j) % 2 == 0即可,其余逻辑无需改动 - 如果需要支持非方阵的普通矩阵,只需要给函数增加列数入参,遍历的时候按实际行、列长度循环即可,核心求和逻辑不需要调整
内容的提问来源于stack exchange,提问作者Bukaida
相关产品推荐
相关产品推荐

