2017-03-14 52 views
-1

所以下面是我的代碼。在「觀察數字」循環中的某處存在索引錯誤,我似乎無法找到或修復。我相信這與PINS列表有關,但我不確定,因爲我的編輯沒有任何改變。觀察失敗的測試用例='11'。單個案件全部通過。不幸的是,因爲我使用codewars,沒有任何的錯誤定行,只是執行以下操作:字符串索引超出範圍,我無法修復錯誤

回溯:

在get_pins

IndexError:字符串索引超出範圍

def get_pins(observed): 

    # Let's see what we're working with 
    print("observed") 
    print(observed) 
    print(" ") 

    # Dictionary of possible numbers for a half-assed observation of a key press. 
    possible = {'0':'08','1':'124','2':'1235','3':'236', 
       '4':'1457','5':'24568','6':'3569', 
       '7':'478','8':'05789','9':'689'} 

    # Single digit pwd case 
    PINS=[] 

    if len(observed) == 1: 
     for digit in possible[observed]: 
      PINS.append(digit) 
     return PINS 

    # Find number of possible PINs 
    num_possibles = 1 
    # Step through observed digits 
    for digit in observed: 
     num_possibles*=len(possible[digit]) 

    # Populate PINS to allow string manipulation 
    PINS = " "*num_possibles 
    print(PINS[num_possibles]) 
    num_change = num_possibles 
    change = [] 
    count = 0 

    # Step through observed, determine change of digit, 
    for digit in observed: 

     # Last digit in observed means it iterates every time 
     if digit != observed[len(observed)-1]: 

      # Develop array for checking position 
      num_change = num_change/len(possible[digit]) 

      for i in range(1,len(possible[digit])): 
       change.append(i*num_change) 

      print(change) 

      # Populate PINS with possible digit, full pin is created after final iteration of digit/observed loop 
      for pin in range(0,num_possibles-1): 
       PINS[pin] = PINS[pin] + possible[digit][count] 
       if (pin+1) in change: 
       count+=1  
      change=[] 
      count =0 
     else: 
      for pin in range(0,num_possibles-1): 
       PINS[pin] = PINS[pin] + possible[digit][count] 
       count+=1 
       if count == len(possible[digit]): 
        count = 0 

    return PINS 
+0

請提供更多信息。什麼行會拋出錯誤?什麼是實際的錯誤信息?另外,如果你通過提供「觀察」的樣本輸入,將其轉換爲[mcve],這將有助於解釋問題。 –

+0

已添加編輯@JohnColeman – aeroterp3767

+0

如果您提供了「已觀察」輸入樣本,以及預期輸出結果,它仍然有幫助。 –

回答

0

的問題是在這裏:

PINS = " "*num_possibles 
print(PINS[num_possibles]) 

第一行創建一個長度爲num_possibles的空格字符串。這意味着有效指數是0, 1, ..., num_possibles - 1。但是,在下一行中,您嘗試在不存在的索引num_possibles處索引該字符串。

我會簡單地刪除那個print。它的目的是什麼?你知道PINS是一串空格,所以爲什麼要麻煩?

字符串是不可變的,因爲PINS是一個字符串,該行

PINS[pin] = PINS[pin] + possible[digit][count] 

將觸發錯誤:

TypeError: 'str' object does not support item assignment 

你應該做的是初始化PINS作爲

PINS = [' ']*num_possibles 

或者,甚至可能更好

PINS = ['']*num_possibles 

在這種情況下,

PINS[pin] = PINS[pin] + possible[digit][count] 

是合法的(雖然它可能會通過使用+=縮短) - 雖然我不知道如果這是你真正想做的事,因爲你是連接作爲possible中的值存儲的字符串,並且不添加這些字符串表示的數字。

在函數結束時,通過return'。加入取代return PINS(銷)`

這將解決你的一些錯誤的,但因爲我知道沒有預期的輸入,也不打算輸出我不能說任何更多。