2016-10-28 8 views
2

なぜ文字列が範囲外であるのか、それを修正する方法がわかりません。文字列索引範囲外DNAパインドーム

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]チェックこの時点では何の数ですか。そして、それがlen(s1)よりも大きいと確信しているから、何番プラス+1番かです。 – DejaVuSansMono

答えて

0

が、私は二つの問題を参照してください。 私は問題を知っていたならば、私はそれを修正しようとすることができますが、私は問題 を理解していないここでは以下のコードです。声明の中でreturn s1[int] intはループではS1

の有効なインデックスではありません

、numがLEN(S1)と高くなるだろう-1。声明のこの時点で

が範囲外です。あなたは正しく境界内になるようにインデックスをチェックするために2つのコマンドを調整して、1つのエラーを修正する必要が

0

代わりの

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) 
関連する問題