2016-10-28 25 views
2

我想不通爲什麼字符串超出範圍,以及如何解決它。 如果我知道這個問題,我可以嘗試修復它,但我不明白的問題 這裏是下面的代碼:字符串索引超出範圍DNA Palindrome

def get_odd_palindrome_at(s1, number): 
    '''(str, int) -> str 
    precondition: int is valid index in s1 
     return str of longest odd palindrome, of which the middle is number. 
    ''' 

    if s1[number-1] != s1[number+1]: 
     return s1[int] 
    num = 1 
    while num < len(s1): 
     if s1[number-num] == s1[number+num]: 
      num= num +1 
    return s1[number-num: number+num+1] 

get_odd_palindrome_at("AGTGAT", 2) 
+0

就在這裏> S1 [數字-NUM:數字+ NUM + 1]檢查這個數字是多少。什麼數字加上num +1是因爲我敢打賭它比len(s1)大。 – DejaVuSansMono

回答

0

我看到兩個問題。

在聲明return s1[int] int是不S1

在循環的一個有效索引,NUM會高達LEN(S1)-1。此時在聲明中

if s1[number-num] == s1[number+num]:

number+num超出範圍。

0

你要調整2個命令正確檢查指標是在邊界,並修復1錯誤:

代替

if s1[number-1] != s1[number+1]:   # number + 1 may be too large 
     return s1[int]      # it is error 

使用

if number + 1 >= len(s1) or s1[number-1] != s1[number+1]: 
     return s1[number] 

,取而代之的

while num < len(s1):      # it isn't sufficient condition 
     if s1[number-num] == s1[number+num]: # it is OK; only for context 

使用更復雜,但是正確的條件

while number - num >= 0 and number + num <= len(s1) - 1: 
     if s1[number-num] == s1[number+num]: 

所以你完整的代碼將是(我加了一些空行)

def get_odd_palindrome_at(s1, number): 
    '''(str, int) -> str 
    precondition: int is valid index in s1 
     return str of longest odd palindrome, of which the middle is number. 
    ''' 

    if number + 1 > len(s1) - 1 or s1[number-1] != s1[number+1]: 
     return s1[number] 

    num = 1 

    while number - num >= 0 and number + num <= len(s1) - 1: 
     if s1[number-num] == s1[number+num]: 
      num= num +1 
      print(number, num) 
    return s1[number-num: number+num+1] 

get_odd_palindrome_at("AGTGAT", 2)