2016-04-23 13 views
0

私は初心者プログラマーです。私は解決できない問題に遭遇しました。私は、各文字の順序値をテキスト内の各文字の順序値に順に追加してテキストを暗号化し、chr()関数を使用して新しい文字を印刷するプログラムを作成しています。暗号化プログラム「文字列インデックスが範囲外です」

codeword = input('Enter codeword : ') 
encrypt = input('Enter text to encrypt : ') 
j = 0 
for i in encrypt: 
    check = (ord(encrypt[j])+ ord(codeword[j])-96) 
    if check > 122: 
     no = check - 26 
     ok = (chr(no)) 
     ok = ok.replace("%", " ") 
     print(ok, end="") 
    if check < 122: 
     yes = (chr(check)) 
     yes = yes.replace("%", " ") 
     print(yes, end="") 
    j+=1 

私はコードワードとしてabcを選択し、暗号化する単語を選ぶとうまく動作し、igbを出力します。しかし、コードワードとしてabc、暗号化する単語としてhello worldを選択すると、次のメッセージが表示されます。 encrypt以来

Traceback (most recent call last): 
    File "C:/Python34/task 2.py", line 9, in <module> 
    check = (ord(encrypt[j])+ ord(codeword[j])-96) 
IndexError: string index out of range 
+0

ああ、私はTUPを暗号化する言葉で手紙を通じて私にアップしてもSTIL質問、しかし、それだけのサイクルをわずかに異なるコードを置く:あなたはこのようなことを行うことができますコードワード –

+0

質問に迷惑をかけないようにしてください。サイトには許可されていません。なぜなら、あなたと他の人の両方に役立つと期待して質問に答える時間を費やした人々の努力を無駄にするからです。 – DSM

答えて

0

長いcodewordよりも、あなたは、たとえば、インデックス5に到達することができます。 encrypt[5]ですが、codeword[5]は存在しません。あなたが最も短いものを見つける必要があります。

for e, c in zip(encrypt, codeword): 
    check = (ord(e) + ord(c) - 96) 
    ... 

またmin()機能を使用することができます。

for j in range(min(len(encrypt), len(codeword))): 
    ... 

編集:あなたがサイクルしたいことが表示されます。永遠のオブジェクトを繰り返し処理し続けます

from itertools import cycle 

for e, c in zip(encrypt, cycle(codeword)): 
    ... 

cycle():あなたは、そのタスクのためにitertoolsを使用することができます。終わりに達すると、最初に戻ります。例えば:

for char in cycle("here"): 
    print(char) 

h 
e 
r 
e 
h 
e 
r 
e 
h 
... 

zip()最短反復可能としてのみこれまで行くので、それだけ限りencryptの長さとしてサイクルします。たとえば:encryptcodewordより短い場合

for e, c in zip("this sentence", cycle("abc")): 
    print(e, c) 

t a 
h b 
i c 
s a 
    b 
s c 
e a 
n b 
t c 
e a 
n b 
c c 
e a 

それはまだ動作します:

for e, c in zip("hi", cycle("abc")): 
    print(e, c) 

h a 
i b 

編集2:あなたがスペースとしてスペースを残しておきたいことが表示されます。それは内の文字がなくなるまで

for e, c in zip(encrypt, cycle(codeword)): 
    if e == " ": 
     check = ord(e) 
    else: 
     check = (ord(e) + ord(c) - 96) 
    ... 
+0

あなたのお時間をいただき、ありがとうございます。ただし、コードワードの文字がなくなるまで印刷します。 –

+0

本当にありがとう、どうもありがとう、私に説明することはできますか? –

+0

@ D.C .:私は再編集しました。 – zondo

関連する問題