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

Python矩阵X形元素翻转代码异常:右上角坐标处理失效

矩阵X形翻转的代码问题

我们用嵌套列表实现了一个n×n矩阵,元素仅为“+”或“-”。需求是:给定转换为0索引的坐标(a, b),翻转该位置及其左上、右上、左下、右下对角位置的元素(X形模式)。

代码在多数场景下正常,但当坐标为右上角(即用户输入的(1, n),对应0索引(0, n-1))时,无法正确翻转(2, n-1)对应的0索引(1, n-2)位置的元素。

示例

输入坐标(1,3)(对应0索引(0,2))时,预期输出:

+ - +    + - -        + - -    - - +
- + - to - - -   or   - - - to - + -
+ - +    + - +        + - -    - - -

但实际输出:

+ - +    + - -        + - -    - - +
- + - to - + -   or   - - - to - - -
+ - +    + - +        + - -    - - -

问题代码(Python 3.8)

try:
    if matrix[a][b] == "+":
        matrix[a][b] = "-"
    elif matrix[a][b] == "-":
        matrix[a][b] = "+"
    else:
        pass

    if matrix[a-1][b-1] == "+" and (a!=0 and b!=0):
        matrix[a-1][b-1] = "-"
    elif matrix[a-1][b-1] == "-" and (a!=0 and b!=0):
        matrix[a-1][b-1] = "+"
    else:
        pass

    if matrix[a-1][b+1] == "+" and a!=0:
        matrix[a-1][b+1] = "-"
    elif matrix[a-1][b+1] == "-" and a!=0:
        matrix[a-1][b+1] = "+"
    else:
        pass

    if matrix[a+1][b-1] == "+" and b!=0:
        matrix[a+1][b-1] = "-"
    elif matrix[a+1][b-1] == "-" and b!=0:
        matrix[a+1][b-1] = "+"
    else:
        pass

    if matrix[a+1][b+1] == "+":
        matrix[a+1][b+1] = "-"
    elif matrix[a+1][b+1] == "-":
        matrix[a+1][b+1] = "+"
    else:
        pass
except:
    pass

问题原因

代码核心错误是先访问矩阵元素,再判断索引是否合法。比如处理左下位置(a+1, b-1)时,先执行matrix[a+1][b-1] == "+"再判断b!=0——如果a+1超出矩阵行数,这行代码会触发索引越界异常,被外层except: pass直接跳过,导致该位置翻转逻辑完全不执行。即使索引合法,这种判断顺序也不符合逻辑,应先确认索引在矩阵范围内,再操作元素。

以右上角坐标(0, n-1)为例,要翻转的左下位置是(1, n-2),此时a+1=1(合法)、b-1=n-2(合法),但代码先访问元素再判断条件,若触发潜在异常或逻辑短路,就会跳过翻转。本质是所有对角位置的判断都应先做索引合法性校验。

修正后的代码

n = len(matrix)
# 翻转当前位置
if matrix[a][b] == "+":
    matrix[a][b] = "-"
else:
    matrix[a][b] = "+"

# 翻转左上(a-1, b-1)
if a > 0 and b > 0:
    if matrix[a-1][b-1] == "+":
        matrix[a-1][b-1] = "-"
    else:
        matrix[a-1][b-1] = "+"

# 翻转右上(a-1, b+1)
if a > 0 and b + 1 < n:
    if matrix[a-1][b+1] == "+":
        matrix[a-1][b+1] = "-"
    else:
        matrix[a-1][b+1] = "+"

# 翻转左下(a+1, b-1)
if a + 1 < n and b > 0:
    if matrix[a+1][b-1] == "+":
        matrix[a+1][b-1] = "-"
    else:
        matrix[a+1][b-1] = "+"

# 翻转右下(a+1, b+1)
if a + 1 < n and b + 1 < n:
    if matrix[a+1][b+1] == "+":
        matrix[a+1][b+1] = "-"
    else:
        matrix[a+1][b+1] = "+"

修正点说明:

  1. 先获取矩阵边长n,用于索引合法性判断
  2. 每个对角位置都先判断索引是否在矩阵范围内,再执行翻转操作
  3. 去掉冗余的else: pass和全局try-except,避免异常被静默忽略,便于排查问题

内容的提问来源于stack exchange,提问作者BlueInundation

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:25:18