2014-09-28 107 views
-1

所以我要找出這個代碼有什麼問題,顯然我沒有看到任何錯誤,因爲我剛剛學習了python。Python函數錯誤字符串索引超出範圍

此外,當我運行該功能,它會給我一個錯誤"String Index out of range"

而我要測試這是否有效。

那麼,什麼似乎是錯的,我應該如何測試它們?

def is_reverse_of(st1, st2): 

    """ 
    is_reverse_of : String String -> Boolean 
    is_reverse_of tells if one string is the reverse of another. 
    preconditions: st1 and st2 are character strings. 
    """ 
    if len(st1) != len(st2): 
     return False 
    i = 0 
    j = len(st2) 
    while j > 0: 
     if st1[i] != st2[j]: 
      return False 
     else: 
      i += 1 
      j -= 1 

    return True 

這是我到目前爲止的測試

def test_is_reverse_of(): 

    """ 
    a suite of pass/fail test cases to validate that is_reverse_of works. 
    """ 
    # Complete this test function. 
    st1 = str(input("Enter the string: ")) 
    st2 = str(input("Enter the string: ")) 

    is_reverse_of(st1, st2) 
+0

檢查'[j]'索引政策。嘗試訪問長度爲len(aString)== j'的字符串的第j個元素失敗,因爲索引是從零開始的---'aString [0]'...'aString [len-1 ]' – user3666197 2014-09-28 01:02:07

+0

'input'已經是一個字符串,所以不需要轉換和'如果st1 [i]!= st2 [j-1]:'將解決你的索引錯誤 – 2014-09-28 01:09:16

回答

1

該指數是基於0的,所以它是從0到LEN(STR2) - 1,不LEN(STR2) 。您可以輕鬆地做簡單的解決這個問題:

j = len(st2) - 1 

順便說一句,你真的只需要一個指數,eitehr i或j,因爲其他人可以很容易地計算出:

def is_reverse_of(st1, st2): 
    if len(st1) != len(st2): 
     return False 
    l = len(st1)  
    for i in range(0, l): 
     if st1[i] != st2[l - 1 - i]: 
      return False 
    return True 
+0

謝謝你的明確答案。我已經修復它並運行該功能,它沒有錯誤地工作。但是,現在我應該如何開始測試函數是否有效(如果它確實表明這些字符串彼此相反) – Eric 2014-09-28 01:35:21

+0

嘗試不同的情況並觀察結果,例如:print(is_reverse_of(「ab 「,」ba「))應該打印爲真; print(is_reverse_of(「ab」,「bac」))應該打印False等。 – 2014-09-28 01:37:42

+0

太棒了!它工作正常。謝謝 – Eric 2014-09-28 01:41:51

相關問題