gpt4 book ai didi

Python,列表索引超出范围错误

转载 作者:行者123 更新时间:2023-12-01 05:47:36 25 4
gpt4 key购买 nike

我正在尝试用 python 测试一个简单的二维 map 坐标生成器。它使用 x 和 y 数组创建一个 Tile 对象,以便我可以访问坐标并修改它们的属性。

这将创建 map 对象并用 2D 坐标平面中的图 block 填充它

map = [[ Tile(True)
for y in range(MAP_HEIGHT) ]
for x in range(MAP_WIDTH) ]

图 block 类:

class Tile:
#a tile of the map and its properties
def __init__(self, blocked, type, owner, block_sight = None):
self.blocked = blocked
self.type = type
self.owner = owner
if block_sight is None: block_sight = blocked
self.block_sight = block_sight

我尝试让程序逐字符读取文本文件来创建 map 。它将在mapx和mapy提供的坐标处插入一个对象到 map 中。

mapx = 0
mapy = 0
filename = str(mapn) + '.txt'
new_map = [[ Tile(True, 0, 0)
for y in range(MAP_HEIGHT) ]
for x in range(MAP_WIDTH) ]
with open(filename) as f:
while True:
c = f.read(1)
if not c:
return new_map
elif (c == '#'):
new_map[mapx][mapy].blocked = False
new_map[mapx][mapy].block_sight = True
new_map[mapx][mapy].type = 0
new_map[mapx][mapy].owner = 0

(又经过几次 elif)

if(mapx < MAP_WIDTH):
mapx += 1
elif(mapy < MAP_HEIGHT):
mapy += 1
mapx = 0

运行此程序时,我收到此错误:IndexError:列表索引超出范围。它说的是这一行

 new_map[mapx][mapy].blocked = False 

这就是过错。知道我做错了什么吗?

最佳答案

初始化后外部列表将有 MAP_WIDTH索引从 0 到 MAP_WIDTH-1 的元素。同样,每个内部列表的索引从 0 到 MAP_HEIGHT-1 .

考虑当 mapx = MAP_WIDTH-1 时会发生什么; ie 使用您的代码位于列表的末尾:

if(mapx < MAP_WIDTH):
mapx += 1
....

mapx的值将变得大于列表的上限。

测试应该是 mapx < MAP_WIDTH-1来解决这个问题。 elif中的测试也需要做相应的改变。

关于Python,列表索引超出范围错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15557198/

25 4 0
文章推荐: .net - 运算符和参数中的 HQL
文章推荐: java - 如何利用 WSDL 生成的 Web 服务客户端?
文章推荐: driver - 禁用/抑制 SD(HC) 写保护
文章推荐: javascript - 无法读取未定义的属性 '#' 出现错误?