Python代码运行报Index out of bounds索引越界错误无法解决求助
问题修复方案
错误根因
- 你创建的
rooms是10×10的NumPy数组,合法索引范围为0~9。当循环变量r遍历到最大值9时,执行rooms[r+1][c]会访问索引10,超出数组边界触发报错。 - 同理当
c遍历到9时,rooms[r][c+1]也会触发相同错误。另外当r=0或c=0时,r-1/c-1会生成负数索引,虽然Python不会直接报错,但会默认访问数组最后一行/最后一列,不符合边界判断的预期逻辑。 - 原代码还存在两个隐性问题:内层循环取
len(rooms)作为列长度仅适配正方形数组,通用性差;print缩进错误会导致每次外层循环结束就重复打印一次数组。
修复代码
只需要在访问四个方向的数组元素前,先判断目标索引是否在合法范围内即可,修复后可正常运行:
import random import numpy as np class Room: def __init__(self, name, contents): self.name = name self.contents = contents rooms = np.zeros((10, 10)) emptyRooms = [] halfHeight = int(len(rooms[1]) / 2) halfWidth = int(len(rooms[0]) / 2) rooms[halfWidth][halfHeight] = 1 for r in range(len(rooms)): # 适配非正方形数组,取首行长度作为列遍历上限 for c in range(len(rooms[0])): if rooms[r][c] == 1: # 左方向判断 if c - 1 >= 0 and rooms[r][c-1] != 1: rooms[r][c-1] = 1 # 右方向判断 if c + 1 < len(rooms[0]) and rooms[r][c+1] != 1: rooms[r][c+1] = 1 # 上方向判断 if r - 1 >= 0 and rooms[r-1][c] != 1: rooms[r-1][c] = 1 # 下方向判断 if r + 1 < len(rooms) and rooms[r+1][c] != 1: rooms[r+1][c] = 1 # 调整缩进,所有循环结束后仅打印一次结果 print(rooms)
内容的提问来源于stack exchange,提问作者Jedidiah Blitz
相关产品推荐
相关产品推荐

