【问题标题】:"List index out of range" error when trying to navigate a 2D array acting as a matrix. Python尝试导航充当矩阵的二维数组时出现“列表索引超出范围”错误。 Python
【发布时间】:2021-07-24 13:45:17
【问题描述】:

我创建了一个充当 8x8 矩阵的二维数组。 我的目标是使用由 wasd 移动的光标使该矩阵完全可导航。 这有效,但仅适用于向上和向左。不适合上下左右。

-创建矩阵的代码

matrix = []
for i in range(8):
    i = []
    for j in range(8):
        i.append(" ")
    matrix.append(i)

-导航矩阵的代码,它的工作原理是找到光标 (+) 的坐标,然后删除它的旧位置并将其插入到新的坐标集中。

row= len(matrix)
column=len(matrix[0])
direction = input("wasd")
        if direction == "w":
            for i in range(row):
                for j in range(column):
                    if matrix[i][j]=="+":
                        matrix[i][j]=" "
                        matrix[i-1][j]= "+"
        elif direction == "a":
            for i in range(row):
                for j in range(column):
                    if matrix[i][j]=="+":
                        matrix[i][j]=" "
                        matrix[i][j-1]= "+"
        elif direction == "s":
            for i in range(row):
                for j in range(column):
                    if matrix[i][j]=="+":
                        matrix[i][j]=" "
                        matrix[i+1][j]= "+"
        elif direction == "d":
            for i in range(row):
                for j in range(column):
                    if matrix[i][j]=="+":
                        matrix[i][j]=" "
                        matrix{i][j+1]= "+"

当我尝试向下或向右移动时出现列表索引超出范围错误,但向上和向左移动完美。

【问题讨论】:

  • 看起来这不是您拥有的所有代码。你能明确描述给你一个错误的运行过程,并给我们一份回溯的副本吗?但就目前而言,我几乎可以肯定您应该在移动光标之前检查与边界的冲突。例如,如果 matricx[3][7] == '+' 并且您输入 'd' 代码的最后一行将等于 matrix[3][8] = '+' 则您的代码中没有这样的元素矩阵。

标签: python list matrix multidimensional-array


【解决方案1】:

我假设您的逻辑是这样工作的:当您在第一行时 - 点击向上将您带到最后一行,当您在第一列时 - 点击左手将您带到最后一列。

你的 up and left 是有效的,因为在 python 中,如果你访问数组中的一个元素,如下所示: arr[-1] - 它会给你数组的最后一个元素。

所以在您的示例中 - 如果 i = 0, matrix[i-1][j] = matrix[-1][j] => 这将为您提供最后一行第 j 列数据。

但是对于您的向下/向右逻辑 - 当您位于最后一行/列时,您将行/列增加 1,这在您的矩阵中不存在。你必须回到第一行/第一列。

尝试使用 %(取模)运算符 - matrix[(i+1)%row][j](用于行)/matrix[i][(j+1)%row](用于列)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多