2013-10-14 36 views
-3

我有這樣的功能在這裏:builtins.IndexError:列表索引超出範圍

def swap_cards(deck, index_deck): 
    swap_deck = [] 
    after_index = [] 
    bandf_index = [] 
    if index_deck >= len(deck): 
     for i in range(0, len(deck) + 1): 
      if deck[i] == index_deck: 
       after_index += [deck[0]] 
      else: 
       bandf_index += [deck[i]] 
     swap_deck += [deck[index_deck]] + bandf_index[1:index_deck - 1] + after_index 

每次我試着輸入指數大於或等於甲板長度我得到的錯誤「列表索引超出範圍」

例子:

swap_cards([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 9) 

我希望[9, 1, 2, 3, 4, 5, 6, 7, 8, 0]但我不是得到‘列表索引超出範圍’。

切換最後和第一個號碼,我不知道我在做什麼錯。

回答

1

您對len()有問題。假設你index_deck是9如在上面的例子:

if index_deck >= len(deck): 
    for i in range(0, len(deck) + 1): 

這一範圍將會產生[0,1,2,3,4,5,6,7,8,9,10,11]

 if deck[i] == index_deck: 
      after_index += [deck[0]] 

由於數組索引是從零開始的,所以上面這行會產生錯誤。甲板[10]和甲板[11]不存在。

 else: 
      bandf_index += [deck[i]] 

固定上述len()聲明將再次解決這個問題,以及(你可以嘗試訪問甲板[10]如果if說法是假的

swap_deck += [deck[index_deck]] + bandf_index[1:index_deck - 1] + after_index 

最後一件事:你驗證if index_deck >= len(deck): 。這將打破deck[index_check]的上述行,因爲在這裏您將始終訪問一個不存在的索引