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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:15:03