2017-08-03 77 views
1

即时尝试将if语句放在for循环中。条件是从数组中读取的。 (在pygame中制作游戏..)列表索引超出范围在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 . . . 

谢谢你的时间和帮助。

+7

'field_array [num]'应该是'x' – asongtoruin

+0

我得到一个类型错误.. –

+0

您是否将'num'初始化为0? – scorpGoku

回答

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的行,并使用你需要的值。

+0

非常感谢,解决了这个问题! –

+0

不客气。这有助于您提供可以轻松再现问题的代码!那样做很好。 – Basya

0

num在被用作if语句中数组的索引之前应该被初始化。由于不存在数字,它给出索引错误。将数字初始化为0或0

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")