2016-06-15 6 views
0

どのように動作するかを知っていただきたいと思い、この:私はどのようにしないでくださいは、私は私の学校のプロジェクトのためのシーザー暗号を構築していますし、復号化部分は、私は、Python 3.4で書いていますし、これまでにプログラムされている

plaintext = "" 
print ("Do you want to encrypt or decrypt a phrase?") 
answer = input("Type e for encrypt or d for decrypt and hit 'Enter'.").lower() 
if answer == ("e") or answer == ("encrypt"): 
    plaintext = input("Enter the phrase you would like to encrypt:") 
else: 
    print("I don't understand") 

shift = int(input("How many shifts would you like to make?") 

alphabet = "abcdefghijklmnopqrstuvwxyz" 
shiftedAlphabet = "jklmnopqrstuvwxyzabcdefghi" 
ciphertext = "" 


for eachletter in plaintext: 
    position = alphabet.index(eachletter) 
    shiftedLetter = shiftedAlphabet[position] 
    ciphertext = ciphertext + shiftedLetter 


print(ciphertext) 


if answer == ("d") or answer == ("decrypt") 
    ciphertext = input("Enter the phrase you would like to decrypt:" 
else: 
    print("mmmm okay") 

shiftedAlphabet - 

解読部分をプログラムしてください(私はコードを比較的簡単にしたいと思いますし、上記と似ていると思います)。

+0

シフトされたアルファベットを検索し、アルファベットの関連する位置に置き換えることを除いて、コードは暗号化と同じになります。 – David

答えて

0

シーザーサイファーは対称である - あなただけの後方同じロジックを適用する必要がある - 暗号化テキストにインデックスを検索し、プレーンなアルファベットからそのインデックスを取得:

plain = '' 
for eachletter in cipertext: 
    position = shiftedAlphabet.index(eachletter) 
    shiftedLetter = alphabet[position] 
    plain = plain + shiftedLetter 
0

だからと夫婦の問題がありますあなたがすでに投稿したコード。私が見落とすことができる軽微な構文エラーがありますが、いくつかの論理エラーもあります。

ユーザーに2回目のプロンプトが表示されますが、プログラムで使用するシフトアルファベットは常に'a'から'j'になります。使用が9ではないシフトを入力するとどうなりますか?

入力平文にアルファベット以外の文字があるとどうなりますか? .index(eachletter)を実行すると、-1が返されます。どのようにあなたの暗号が動作するのでしょうか?

最後に、それは、ユーザが最初に解読しようとすると、あなたのインストラクターが、しかし今、暗号化または復号化するための任意の時点で'e'または'd'を押してできるようにしたいと思い見える、I don't understandが印刷されます。最後に解読するのと同じ問題。また、解読するときにはおそらくシフトを要求する必要があります。

私の最後のアドバイスは、シーザー暗号が何であるかを考えることです。文字を回転するだけです。入力がa catでシフトが2の場合、c ecvとなります。復号化するには、各文字を同じ量だけ後方に回転させる必要があります(2)。

+0

提案していただきありがとうございます - 私はそれを感謝します。それにもかかわらず、どのように復号化とシフトコードを含めるのですか? –

+0

投稿したコードは、シフトされたアルファベットとインデックスを使用して動作します。この作業を任意のシフトで行うには、アルファベットをその分だけずらす必要があります。アルファベット3を左にシフトすると、アルファベットの最初の3文字が後ろに置かれます。 'abcd ..... xyz' - >' def .... xyzabc'です。文字列スプライシングとこれをどうやってできるか考えてみましょう。 –

+0

さらに、解読のために、シフトされたアルファベットで同じことをするでしょうが、左にシフトするのではなく、 'abc..xyz' - >' xyzabc ... uvw' 。私はあなたが割り当てられていることが分かるので、あなたのためにコードを書くつもりはありません。思考のために食べ物を与えるだけです。 –

関連する問題