列表索引超出For循环范围

时间:2017-08-03 13:24:28

标签: python pygame

我试图将if语句放在for循环中。条件从数组中读取。 (在游戏中制作游戏......)

这是field_array数组。

field_array = [(100, 100), (150, 100), (200, 100)]

这是for循环中的if语句。

for x in field_array:
    if player_new_coord[0] >= field_array[num][0] and player_new_coord[0] <= field_array[num][0]+50:
        if player_new_coord[1]+player_height >= field_array[num][1] and player_new_coord[1] <= field_array[num][1]+50:
            print("farm")
    num += 1

我收到以下错误。

2DFarmingSimulator.py", line 81, in Main

if player_new_coord[0] >= field_array[num][0] and player_new_coord[0] <= field_array[num][0]+50:
IndexError: list index out of range
Press any key to continue . . .

感谢您的时间和帮助。

3 个答案:

答案 0 :(得分:1)

没有整个代码,我不知道如何定义或初始化num。当您将其用作列表的索引时,它显然具有错误的值。

但....你不需要列表中的索引!

您已经在遍历循环。 x是当前项目。

所以这应该工作(运行代码我创建了你使用但未在代码示例中定义的值,为它们分配我从空中挑选的值。此代码运行。)

field_array = [(100, 100), (150, 100), (200, 100)]

player_new_coord = [130,120]
player_height = 119

for x in field_array:
    if player_new_coord[0] >= x[0] and player_new_coord[0] <= x[0]+50:
        if player_new_coord[1]+player_height >= x[1] and player_new_coord[1] <= x[1]+50:
            print("farm")

当然,你需要删除定义player_new_coord和player_height的行,并使用你需要的值。

答案 1 :(得分:0)

num应该在if语句中用作数组的索引之前进行初始化。由于num不存在,因此会产生索引错误。将num初始化为某个或0

答案 2 :(得分:0)

在您的代码段中,x被分配(100, 100), (150, 100), (200, 100),但未使用此功能。此外,我们无法看到num被设置为什么,因此我假设您的意思是将num初始化为第一个索引并在每个循环上递增。

以下代码段会将x分配给正确的索引,for循环将在每次迭代后为您增加num

for num in range(len(field_array)):
    if player_new_coord[0] >= field_array[num][0] and player_new_coord[0] <= field_array[num][0]+50:
        if player_new_coord[1]+player_height >= field_array[num][1] and player_new_coord[1] <= field_array[num][1]+50:
            print("farm")