You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 02:27:31