2016-09-06 16 views
0

「IndexError:文字列インデックスが範囲外です」 「letterCount + = 1」を最初のelseに追加すると、このエラーは発生しません。それは働いている。Python IndexError:文字列インデックスが範囲外にある

目標は、s内の「ボブ」の数をカウントすることです。

ありがとうございます!

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

文字列内の単語のLENをチェックするために列挙子を使用することができますおそらく非重複出現のために、配列の最後に到達し、あなたは、最新の要素を加えた1 – lapinkoira

+0

's.count(「ボブ」)を取得するときに'インデックスエラーを取得し、http://stackoverflow.com/a/2970542/オーバーラップについては2681632を参照してください。また、今後の参考のために、letterCount、列挙(複数可)内のポインタのために '使用:'あなたが(代わりに、手動増分の)インデックスが必要な場合。 –

+0

ありがとう、それは問題でした! –

答えて

0

次のようなもので、文字列sの長さをチェックする必要があります:私は、次のコードはあなたのために働くことを願っています

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で文字数を確認しています。それは文字列の最後にのみ一致します。

またはあなたが(letterCount + 1)(s)は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)) 
関連する問題