2016-06-01 2 views
0
s='saamaarrr' 
for i in range(0, len(s)-1): 
    while(s[i]==s[i+1]): 
     i+=1 
     print(s[i]) 

Indexerror: string Index außerhalb des zulässigen BereichsIndexError: String Index außerhalb des Bereichs ... warum in diesem kleinen Stück Code?

Ich bin neu in Python. Ich kenne die Gründe für diesen Fehler. Aber ich weiß nicht, warum es hier vorkommt. Ich habe andere Antworten auch

auf diese Frage lesen
+1

Sie rufen 's [i + 1]' innerhalb einer for-Schleife auf, die bis 'len (s) -1)' geht. Wenn "i = len (s) -1" ist, liegt "i + 1" außerhalb des Bereichs. –

Antwort

1

Range-Objekte umfassen die linke gebunden und schließen das Recht gebunden
Wenn die Zeichenfolge 9 Zeichen lang ist, wie es in Ihrem Fall ist würde der Bereich Sequenz:
0 1 2 3 4 5 6 7 8

Lassen Sie uns einen Blick auf, was passiert, wenn die Variable i in der for Schleife 8.
in Ihrem while Schleife erreicht, Sie überprüfen, ob s[8] gleich zu s[9]. Da die Indexierung in Python wie in vielen anderen Programmiersprachen bei 0 beginnt, würde der letzte Buchstabe der Zeichenfolge s einen Index 8 haben, was bedeutet, dass der Index 9 außerhalb des Bereichs der Zeichenfolge liegt. Dies verursacht einen Fehler.

es zu beheben, machen Sie Ihre for Schleife wie folgt aus:

for i in range(0, len(s)-2): 

diese Weise die Reichweite Sequenz 0 1 2 3 4 5 6 7 sein wird, so dass es nicht zu einem Fehler führen wird.

Auch Sie müssen nicht mit der linken als 0 gebunden angeben, ist es ein Standardwert, so funktioniert das auch:

for i in range(len(s)-2): 
+0

danke ... tolle Erklärung! –

0
while(s[i] == s[i+1]) 

, die Probleme verursacht, weil, wenn i = len (s) -1, s [i + 1] außer Reichweite sein!

Sie brauchen keine while-Schleife innerhalb Ihrer for-Schleife. Stellen Sie den Bereich Anweisung in der FOR und versuchen stattdessen eine if-Anweisung ...

for i in range(0, len(s)-2): 
    If s[i]==s[i+1]: 
     print(s[i]) 
0

Das Problem ist, dass Sie den Wert von s[i+1] zugreifen möchten vor Testen des tatsächlichen Werts von i+1. Ich schlage auch vor, dass Sie nicht die gleiche Variable (i) in Ihren beiden for und while Schleifen verwenden. Hier

ist das Ergebnis:

s='saamaarrr' 
for i in range(0, len(s)-1): 
    j = i + 1 
    while (j < len(s)) and (s[i]==s[j]): 
     print(s[j]) 
     j+=1 

Und hier ist der Ausgang:

a 
a 
r 
r 
r 

Sie nicht wissen, was Sie erreichen wollen, aber ...

Hope it‘ Ich werde hilfreich sein!

Verwandte Themen