2016-09-20 2 views
-1

Я пытаюсь создать программу, которая ищет строку для «bob» и печатает количество раз, которое она появляется. Вот код:string index out of range error in for loop

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

Я получаю индекс строки из ошибки диапазона и я не могу показаться, чтобы исправить это. любые предложения

+3

Вы ищете s.count ('bob')? – Leo

+1

Это, кажется, дубликат: http://stackoverflow.com/questions/1155617/count-occurrence-of-a-character-in-a-string Что обеспечивает гораздо лучший способ сделать то, что вы делает. :) – Kieran

+0

Обратите внимание, что '' bobob'.count ('bob') == 1', а не 2, как можно было бы надеяться. – BallpointBen

ответ

1

Использование

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

или

g!=len(s)-1 

len() дает общее количество символов, которое будет индексом символа после последнего, так как индексация начинается с 0.

Вы можете избавиться от части if g!=0 and g!=len(s), если вы используете

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

это сработало! спасибо за быстрый ответ, я не могу подчеркнуть, что достаточно –

+1

@ sudomakeinstall2 Спасибо за редактирование. Сейчас это выглядит намного лучше. :) – SilentLupin

0

Когда вы сделаете ваше состояние:

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

В последнем элементе вашей строки, это невозможно сделать s[g+1], потому что это из строки.

Итак, вы должны закончить свою петлю незадолго до конца. Например, для примера:

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