python
2016-09-06 7 views 0 likes 
0

누군가가 나를 도와 줄 수 있습니까? "IndexError : 문자열 인덱스가 범위를 벗어났습니다." "letterCount + = 1"을 첫 번째 else에 추가하면이 오류가 발생하지 않고 그것은 효과가있다.Python IndexError : 문자열 인덱스가 범위를 벗어났습니다.

목표는 s의 "bob"을 계산하는 것입니다.

감사합니다.

s = 'oobobodobooobobobobabobbobbobobbobbobhbxbobbk' 

vowelCount = 0 
letterCount = 0 
pointer = s 

for pointer in s: 
    print(pointer) 
    if pointer == 'b': 
     print (str(letterCount) + '. betű B') 

     if (s[letterCount+1] + s[letterCount+2]) == str('ob') : 
      vowelCount += 1 
      letterCount += 1 
      print(str(vowelCount) + '. BOB megtalálva') 
     else: 
      print('Nem OB jön utána') 
      letterCount += 1 
    else:  
     print(str(letterCount) + '. betű nem B') 
     letterCount += 1 

print ("Number of times bob occurs is: " + str(vowelCount)) 
+2

(letterCount + 1) 것 렌 (들) 그래서보다 큰 경우 당신은 확인되지 않습니다 가능성이 배열의 끝에 도달하면 최신 요소를 얻을 때 인덱스 오류가 발생합니다 겹치지 않는 발생에 대한 하나의 – lapinkoira

+0

's.count ("bob")', http://stackoverflow.com/a/2970542/ 중복에 대해서는 2681632를 참조하십시오. 또한 추후 참조를 위해, 수동 증가 대신 색인이 필요할 경우'for letterCount, 열거 형의 포인터 :'를 사용하십시오. –

+0

대단히 고맙습니다, 그것이 문제였습니다! –

답변

0

당신은 같은 뭔가 문자열의 길이를 확인해야합니다

letterCount+2 <= len(s) 

s = 'oobobodobooobobobobabobbobbobobbobbobhbxbobbk' 

vowelCount = 0 
letterCount = 0 
pointer = s 

for pointer in s: 
    print(pointer) 
    if pointer == 'b': 
     print (str(letterCount) + '. betű B') 

     if (letterCount+2 <= len(s) and (s[letterCount+1] + s[letterCount+2]) == str('ob')) : 
      vowelCount += 1 
      letterCount += 1 
      print(str(vowelCount) + '. BOB megtalálva') 
     else: 
      print('Nem OB jön utána') 
      letterCount += 1 
    else:  
     print(str(letterCount) + '. betű nem B') 
     letterCount += 1 

print ("Number of times bob occurs is: " + str(vowelCount)) 
0

나는 다음과 같은 코드가 당신을 위해 작동 바랍니다.

s = 'oobobodobooobobobobabobbobbobobbobbobhbxbobbk' 

vowelCount = 0 

letterCount = 0 

pointer = s 

print len(s) 

for pointer in s: 

    if pointer == 'b': 

     if (len(s) != letterCount+1 and len(s) != letterCount+2): 

      if (s[letterCount+1] + s[letterCount+2]) == str('ob'): 

       vowelCount += 1 

       letterCount += 1 

       print(str(vowelCount) + '. BOB') 

      else: 

       letterCount += 1 
    else: 

     letterCount += 1 


print ("Number of times bob occurs is: " + str(vowelCount)) 

이 문장에서 나는 문자열의 len으로 문자 수를 확인합니다. 문자열의 끝에서만 일치합니다.

하거나 문자열에서 단어의 렌을 확인하기 위해 열거를 사용할 수 있습니다

 
for i, _ in enumerate(s): #i here is the index, equal to "i in 
range(len(s))"

if s[i:i+3] == 'bob': #Check the current char + the next three chars. bob += 1 print('Number of times bob occurs is: ' + str(bob))
0
The final solution. 

s = 'obbobbbocbobbogboobm' 

vowelCount = 0 
letterCount = 0 
pointer = s 

for pointer in s: 
    print(pointer) 
    if pointer == 'b': 
     print (str(letterCount) + '. betű B') 

     if (len(s)-2 > letterCount):  
      print('van utána két betű') 
      if (s[letterCount+1] + s[letterCount+2]) == str('ob') : 
       vowelCount += 1 
       letterCount += 1 
       print(str(vowelCount) + '. BOB megtalálva') 
      else: 
       print('Nem OB jön utána') 
       letterCount += 1 
     else: 
      print('nincs utána két betű')   
      break 
    else:  
     print(str(letterCount) + '. betű nem B') 
     letterCount += 1 

print ("Number of times bob occurs is: " + str(vowelCount)) 
관련 문제