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

はIndexError:範囲IndexError:文字列インデックスが範囲外です...この小さなコードではなぜですか?

のうち文字列インデックスIのpythonに新しいです。私はこのエラーの理由を知っています。しかし、なぜ私はここで発生しているのかわかりません。また、私はこの質問にI = LEN(S)-1、sは[I + 1]は範囲外となりますので際の問題を引き起こしている

+1

あなたは、 'len(s)-1 'まで続くforループの中で' s [i + 1] 'を呼び出しています。 'i = len(s)-1'のとき、' i + 1'は範囲外です。 –

答えて

1

範囲オブジェクトは左バインド包含および除外、レンジ・シーケンスは次のようになります。
0 1 2 3 4 5 6 7 8

するのはforループ内の変数is[8]が同じであれば、あなたのwhileループ8.
は、あなたがチェックしているに達したときに何が起こるかを見てみましょうs[9]。 Pythonのインデックスは他の多くのプログラミング言語のように0から始まるので、文字列sの最後の文字はインデックス8を持ちます。つまり、インデックス9が文字列の範囲外です。これにより、エラーが発生します。このようなあなたのforループを作り、それを修正する

:それはエラーが発生することはありませんので、

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

こう範囲シーケンスは、0 1 2 3 4 5 6 7になります。

また、あなたは0としてバインドされ、左を指定する必要はありません、それはデフォルト値なので、これも動作します:

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

ありがとう...すばらしい説明! –

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

を他の回答を読みました!

forループのwhileループをネストする必要はありません。文字列は9つの文字であれば、それはあなたのケースであるとして、
をバインド権利をあなたのために範囲文を調整して、代わりにif文を試す...

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

問題はあなたが前にs[i+1]の値にアクセスしたいということですi+1の実際の値をテストします。私はまたあなたのforwhileループの両方で同じ変数(i)を使用しないことをお勧めします。ここで

は結果である:

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 

そして、ここでは、出力されます。

a 
a 
r 
r 
r 

はあなたが達成したいのか分からない、しかし...

は」それを願っています助けてください!

関連する問題