2016-10-28 3 views
2

Ich kann nicht herausfinden, warum die Saite außerhalb des zulässigen Bereichs liegt und wie sie zu beheben ist. Wenn ich das Problem wusste, ich versuche, es zu reparieren konnte, aber ich verstehe nicht das Problem Hier ist der Code unter:String Index Außerhalb des Bereichs 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

Genau hier> s1 [number-num: Anzahl + num + 1] prüfen welche Nummer ist an diesem Punkt. Und welche Nummer plus Nummer +1 ist, weil ich wette, dass es größer ist als die Len (s1). – DejaVuSansMono

Antwort

0

Ich sehe zwei Probleme.

In der Erklärung return s1[int] int ist kein gültiger Index von s1

In der Schleife wird num so hoch wie len (s1) -1. An diesem Punkt in der Aussage

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

number+num ist außerhalb des zulässigen Bereichs.

0

Sie haben zwei Befehle zur Einstellung korrekt Index zu überprüfen, in Grenzen zu sein, und einen Fehler zu beheben:

Statt

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

Verwendung

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

und statt

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

Verwendung komplexer aber die richtige Bedingung

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

So Ihre vollständige Code wird (ich habe noch einige leere Zeilen)

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) 
Verwandte Themen