2016-08-17 14 views
0

申し訳ありませんが、私はエンコーダ/デコーダを作っています。現在、私のアイデアがうまくいくかどうかを確認するためにテストしていますが、範囲外にならないと文字列インデックスが範囲外です。最初はインデックスエラー:文字列が範囲外ですが、範囲外になることはありませんか?

message = "abc" 
#Should come out as 212223 
translated = ' ' 


n = 1 
while n >= 0: 
    t = message[n] 
    if t == 'a': 
     translated = translated + '21' 
    elif t == 'b': 
     translated = translated + '22' 
    elif t == 'c': 
     translated = translated + '23' 
    while n <= len(message): 
     n = n + 1 
print(translated) 

それは私には完璧な理にかなっているので、私は私がやっている何のために解決し、適切な助けを探して苦労していたので、私はいくつかの助けを持つことができますか?リンク、解決策、私が間違ってやっていること、それを修正する方法は?ありがとう

答えて

3
n = 0 
while n >= 0: 

増分を続けていくと無限ループになりますn。 ある点では、message[n]が範囲外になります。

while n <= len(message):を現在のループではなくメインループにする必要があります。

良い方法はforループでmessageの上に直接反復するために次のようになります。ここでは

for t in message: 
    if t == 'a': 
     translated = translated + '21' 
    elif t == 'b': 
     translated = translated + '22' 
    elif t == 'c': 
     translated = translated + '23' 
0

while n <= len(message): 
    n = n + 1 

に変更する必要がある場合:

while n < len(message): 
    n = n + 1 

最後のインデックスインデックスの開始位置は文字列のlen(message) - 1になります0 私はただlen(message) - 1を代わりに瞬時に設定します。

0

最後に、あなたはt = message [3]を使用しています。これはエラーの原因です。メッセージ変数に "abc"が含まれていれば、t = message [0]、t = message [1]、t = message [2]にしかアクセスできません。だからこれを試してください

message = "abc" 
#Should come out as 212223 
translated = ' ' 


n = 1 
while n >= 0: 
    t = message[n-1] 
    if t == 'a': 
     translated = translated + '21' 
    elif t == 'b': 
     translated = translated + '22' 
    elif t == 'c': 
     translated = translated + '23' 
    while n <= len(message): 
     n = n + 1 
print(translated) 
関連する問題