2016-09-20 1 views
-1

Ich versuche, ein Programm, das eine Zeichenfolge für "Bob" sucht und die Anzahl der Male es erscheint. Hier ist der Code:String-Index außerhalb des Bereichs Fehler in for Schleife

s = 'mbobobboobooboo' 
numbob = 0 
for i in range(len(s)) : 
    u = s[i] 
    if u == 'o': 
     g = i 
     if g != 0 and g != len(s) : 
      if (s[g+1]) == 'b' and (s[g-1]) == 'b': #this line is the problam 
       numbob += 1 
       print("Number of times bob occurs is: " +str(numbob)) 

Ich erhalte die String-Index außerhalb des zulässigen Bereichs Fehler und ich kann nicht scheinen, um es zu beheben. Anregungen

+3

Suchst du nach s.count ('bob')? – Leo

+1

Dies scheint ein Duplikat zu sein: http://stackoverflow.com/questions/1155617/count-occurrence-of-a-character-in-a-string Die bietet eine viel bessere Möglichkeit, das zu tun, was du bist tun. :) – Kieran

+0

Beachten Sie, dass "Bobob" .count ("Bob") == 1, nicht 2, wie man hoffen könnte. – BallpointBen

Antwort

1

Verwenden

for i in range(len(s)-1) 

oder

g!=len(s)-1 

len() gibt Ihnen die Gesamtzahl der Zeichen, die den Index des Zeichens nach dem letzten sein wird, da die Indizierung bei 0 beginnt

Sie können alle der if g!=0 and g!=len(s) Teil zusammen, wenn Sie

01 verwenden loszuwerden
for i in range(1,len(s)-1) 
+0

es hat funktioniert! Danke für die schnelle Antwort, ich kann nicht genug betonen, –

+1

@ sudomakeinstall2 Danke für die Bearbeitung. Es sieht jetzt viel schöner aus. :) – SilentLupin

0

Wenn Sie Ihren Zustand machen:

if (s[g+1]) == 'b' and (s[g-1]) == 'b': 

Im letzten Teil Ihrer Zeichenfolge, ist es unmöglich, s[g+1] zu tun, weil es aus der Zeichenfolge ist.

So müssen Sie Ihre Schleife kurz vor dem Ende beenden. Beispiel:

for i in range(len(s)-1) : 
Verwandte Themen