2016-04-27 20 views
0

私が開発した暗号化を自動的に適用するプログラムを作った。コードの特定の1ビットの範囲内で、私は "文字列インデックスの範囲外"エラーを取得し続けます。「インデックスが範囲外です」というエラーが表示されるのはなぜですか?

このコードは何をしますか?

以下のコードは配列dを作成します。文字列の一部を配列に追加します。コードの目的は、元のテキストはその後、アイデアは、コードの最後の行が与える

a b c d e  
f g h i j  
k l X X X 

にこれを有効にすることです、「ABCDEFGHIJKL」であった場合を意味し、幅5とテキストの外に四角形を作ることですエラー "文字列インデックスが範囲外です"なぜですか?それは5

d = [] 
for x in range(1,length/5+2): 
    d.append(string[(x-1)*5:5*x]) 
d2=str(d).replace('[','').replace(']','').replace("'",'').replace(',','').replace(' ','') 
lend2=len(d) 
new='' 
for i in range(1,lend2): 
    new += str([l[i-1] for l in d]).replace('[','').replace(']','').replace("'",'').replace(',','').replace(' ','') 

フル・エラーテキストに均等にデバイドように、以前のコードでは、私は言及を忘れているように、私は文字列の末尾にXさんを追加します。

new += str([l[i-1] for l in d]).replace('[','').replace(']','').replace("'",'').replace(',','').replace(' ','') 
IndexError: string index out of range 
+0

テキストブロックがモノスペースである必要がある場合、標準的な解決方法は、厳密にコードではない場合でも、コードをフォーマットすることです。 – user2357112

+2

'str()'に 'list'を送り、不要な文字をすべて置き換えるのではなく、実際に' str.join() 'を使うべきです。 – TigerhawkT3

+0

私のコードはいくつかの領域で汚れているのは事実ですが、主な関心事はそのエラーを引き起こしていることです。 – DevilApple227

答えて

0

私はあなたを考えます内部で'string'[i][j]をしようとしています。コードはほとんど読めるものではありませんが、それは私が密接な検査から集めたものです。

文字のn番目の要素を取得することはできません。最初の要素のみを取得することはできません。

'string'[0][0] == 's'
'string'[0][1] ==範囲

a = 'asd' 
for i in range(1, len(a)): 
    [l[i-1] for l in a] # During the first loop, l == 'a' 
         # You're trying to grab l[i-1] that doesn't exist 
2

のうち、文字列のインデックス、私はそれがうまく問題をまとめたものだと思うので、私は答えとして、このコメントを投稿します。

あなたは、これは時々、それはすべての時間真実真実ではありませんされている間NとMのすべての値に対して

N % M >= N // M 

という仮定を作っています。それが真でないときは、インデックスエラーが発生します。

あなたのプログラムで

N == len(input string)M == 5.一度、あなたの入力文字列M文字から文字をオフにスライスされています。だからあなたのサンプル入力用:abcdefghijklあなたが

['abcde', 'fghij', 'kl'] 

あなたはあなたが1から2に、この場合には、範囲にいる

for i in range(1,lend2): 

で反復するとき、あなたは、個々のインデックスを参照して終わりますアイテムを1を引いてリストするので、インデックス0と1を参照すると、これは機能します。これらの値を持つ方程式は、実際には

11 % 5 >= 11 // 5 
    2 >= 2 

となります。


あなたは1つの文字でご入力文字列を短くした場合、あなたが

['abcde', 'fghij', 'k'] 

を取得するあなたはまだiの同じ値の上に至るまでされている、とあなたはまだ、インデックス0と1にアクセスしようとしているが、それ3文字目が1文字だけであるため、3文字目で失敗します。この失敗した場合には上部の方程式が真でないある

11 % 5 >= 11 // 5 
    1 >= 2 

を読み出し

注意。

+0

ああ、私は私のソースにある私のコードの中で非常に重要な部分を除外しました。私のソースでは、Xを文字列に追加して、5に均等に決定します。したがって、abcdefはA B C D Eになります。\ n F X X X X – DevilApple227

関連する問題