Python矩阵索引器异常不工作

2024-04-25 00:37:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个函数,使移动1单位到左边(在x轴)在一个网格。它应该只在左边有一个有效的坐标时工作,如果没有(即起点在网格的边缘),函数应该返回None。以下是我的尝试:

def left_move(point):
    try: 
        LEFT = grid[point[1]][point[0]-1]
    except IndexError: 
        return None
    if LEFT == '.':
        change = [-1,0]
        for idx, amount in enumerate(change):
            point[idx]+=amount
        return point
    return None

假设起点是[0,3],因此位于网格边缘,我只运行代码的顶部:

def left_move(point):
    try: 
        LEFT = grid[point[1]][point[0]-1]
    except IndexError: 
        return None

它按预期返回None。但是如果整个块被执行,它返回[-1,3],它在网格之外,不应该被try-except允许。为什么会这样?又如何纠正呢?你知道吗


Tags: 函数none网格movereturndefleft边缘
2条回答

这是因为Python在数组索引中对-1的解释是数组的最后一个元素。-1是引用数组元素的合法方式,因此不会触发IndexError异常。你知道吗

>>> a = [0,1,2]
>>> print a[-1]
2

您需要手动检查给定的值是否解析为-1,然后相应地进行处理。你知道吗

在这里,您需要将其余的代码放在try语句中。否则,它将尝试,失败,然后运行其余的代码。你知道吗

def left_move(point):
    if point[0]-1 != -1: 
        LEFT = grid[point[1]][point[0]-1]
        if LEFT == '.':
            change = [-1,0]
            for idx, amount in enumerate(change):
                point[idx]+=amount
            return point
        return None
    else: 
        return None

相关问题 更多 >