2016-03-22 16 views
0

私は学校の学生で、現在はプログラミングの課題としてPythonでCaesar Cipherを行っています。最初のタスクは、ユーザーにメッセージ、オフセットを要求し、コードがユーザーの決定に基づいて暗号化または復号化するプログラムを作成することでした。私はPythonで全く経験していないので、私はここで最高の状態ではないですよ、むしろシンプルであることに私のコードです:キーワード付きシーザー暗号 - Python

message = input("What would you like your message to be? ") 

key = int(input("What would you like your offset to be? ")) 

count = 0 
while count == 0: 
    mode = str(input("Would you like to encrypt or decrypt? ")) 
    if mode == "encrypt" or mode == "Encrypt" or mode == "E" or mode == "e": 
     count = count + 1 
    elif mode == "decrypt" or mode == "Decrypt" or mode == "D" or mode == "d": 
     count = count + 1 
    else: 
     print("You need to enter in a valid answer. Please try again. ") 

letters = "abcdefghijklmnopqrstuvwxyz" 

translated_message = "" 

for character in message: 
    if character in letters: 
     number = letters.find(character) 
     if mode == "encrypt" or mode == "Encrypt" or mode == "E" or mode == "e": 
      number = number + key 
     elif mode == "decrypt" or mode == "Decrypt" or mode == "D" or mode == "d": 
      number = number - key 



     if number >= len(letters): 
      number = number - len(letters) 
     elif number < 0: 
      number = number + len(letters) 


     translated_message = translated_message + letters[number] 

    else: 
     translated_message = translated_message + character 

print(translated_message) 

は今、次のタスクは、繰り返されるキーワードでシーザー暗号を作成することですユーザーが入力したメッセージに合わせて必要なだけ何回も繰り返します。だから私は自分のメッセージとして "パスワード"とキーワードとして "キー"を入力した場合、キーはテキストに合わせて何回も繰り返され、プログラムは数値をまとめて新しい暗号化または復号化を作成する必要がありますメッセージ。例えば、翻訳されたメッセージの最初の文字は10(K)+ 15(P)= 25(Y)のようなYです。

私はこの機能を追加することで元のコードを拡張しようとしましたが、できません。このコードを使用してこの機能を追加するために誰かが私を助けてくれたら、それは非常に感謝しています。助けてくれてありがとう。

+5

から始まるので、私は投票していSOは宿題修了サービスでもなく、教授サービスでもないので、この質問を話題として閉じてください。 – TigerhawkT3

+0

申し訳ありませんが、これはどういう仕組みか分かりません。私はあなたにこの種のことを許されたと思った。このタイプの質問を投稿できる別の場所/ウェブサイトはありますか? – thisisnotaname

+0

どのようにあなたは*できないのですか* –

答えて

0

これは動作するはず:

message = input("What would you like your message to be? ") 

key = input("What would you like your offset to be? ") 

count = 0 
while count == 0: 
    mode = str(input("Would you like to encrypt or decrypt? ")) 
    if mode == "encrypt" or mode == "Encrypt" or mode == "E" or mode == "e": 
     count = count + 1 
    elif mode == "decrypt" or mode == "Decrypt" or mode == "D" or mode == "d": 
     count = count + 1 
    else: 
     print("You need to enter in a valid answer. Please try again. ") 

letters = "abcdefghijklmnopqrstuvwxyz" 

translated_message = "" 

index = 0 
for character in message: 
    if character in letters: 
     number = letters.find(character) 
     if mode == "encrypt" or mode == "Encrypt" or mode == "E" or mode == "e": 
      number = number + (ord(key[index]) - ord('a')) 
     elif mode == "decrypt" or mode == "Decrypt" or mode == "D" or mode == "d": 
      number = number - (ord(key[index]) - ord('a')) 
     index = index+1 
     index = index % len(key) 


     if number >= len(letters): 
      number = number - len(letters) 
     elif number < 0: 
      number = number + len(letters) 


     translated_message = translated_message + letters[number] 

    else: 
     translated_message = translated_message + character 

print(translated_message) 

は、その点に注意してください。10(K)+ 15(P)= 25(Z)、インデキシングは0

+0

ここで、key = "key"なので、indexはそれぞれの文字を得るのに役立ちます。つまり、 'key [index = 0] = 'k''、' key [index = 1] = e'、 'index = index%len (key) 'は、キーの終わりに達したときにインデックスを0に戻してキーを繰り返すことができるようにします。 – uSeemSurprised

+0

'ord(character)' =>これは文字のASCII値、つまり文字に対応する固定の整数値を与えるため、ここで詳しく読むことができます:https://en.wikipedia.org/wiki/ASCII – uSeemSurprised

+0

'' a ''のASCII値が '' '' k ''のASCII値であれば、 '' ord(character) - ord( 'a') ''を実行すると、は107です: 'ord( 'k') - ord( 'a')= 107 - 97 = 10'つまりインデックスを与えます。 – uSeemSurprised

0
def encrypt(text, key): 
    cryptotext = "" 
    keylen = len(key) 
    for i, char in enumerate(text): 
     if char == " ": 
      cryptotext += " " 
     else: 
      cryptotext += chr(((ord(char)-97+ord(key[i%keylen])-96)%26)+97) 
    return cryptotext 

def decrypt(ciphretext, key): 
    text = "" 
    keylen = len(key) 
    for i, cichar in enumerate(ciphretext): 
     if cichar == " ": 
      text += " " 
     else: 
      text += chr(((ord(cichar)-ord(key[i%keylen])-2)%26)+97) 
    return text 

print(encrypt("abcdefghijklmnopqrstuvwxyz", "secret")) 
print(decrypt("tgfvjzzmlbpffsrhvllyxnbrre", "secret")) 
+2

OPや将来の読者のために、いくつかの単語を追加して回答の仕組みや理由を説明するのは建設的です。 – Reti43

関連する問題