2017-08-03 76 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")