2017-02-20 3 views
1

私はCeasar暗号をラップアラウンドさせようとしています。残念ながら、私はそれを実装する方法についてはわかりません。それが現在であるとしてここに私のコードです:Ceasar Cipherのラップアラウンド

maximum_character = unciphered_text[0] 
maximum_count = unciphered_text.count(unciphered_text[0]) 
for char in unciphered_text: 
    if char is not " ": 
     if unciphered_text.count(char) > maximum_count: 
      maximum_character = char 

print("The most frequent character used is: ", maximum_character) 

ASCII_maximum = maximum_character.lower() 
ASCII_number = ord(ASCII_maximum) 
print(ASCII_number) 

shift_distance = ord('e')-ASCII_number 
print("The shift distance is: ", shift_distance) 

def caesar_cipher(unciphered_text, shift_distance): 
    ciphered_text = "" 
    for char in unciphered_text: 
     if char.isalpha(): 
      cipher_process = ord(char)+shift_distance 
      if cipher_process > ord('z'): 
      cipher_process -= 26 
      post_translation = chr(cipher_process) 
      ciphered_text += post_translation 
    return ciphered_text 

answer = caesar_cipher(unciphered_text, shift_distance) 
print(answer) 

は私のコードは、それがプロセス内のスペースや適切な句読点を削除して終わる読みやすい何かに入力を翻訳することができますが。

Input: Frzdugv glh pdqb wlphv ehiruh wkhlu ghdwkv; Wkh ydoldqw qhyhu wdvwh ri ghdwk exw rqfh. Ri doo wkh zrqghuv wkdw L bhw kdyh khdug, Lw vhhpv wr ph prvw vwudqjh wkdw phq vkrxog ihdu; Vhhlqj wkdw ghdwk, d qhfhvvdub hqg, Zloo frph zkhq lw zloo frph 

Output: Cowardsdieman_timesbeforetheirdeathsThevaliantnevertasteofdeathbutonceOfallthewondersthatI_ethaveheardItseemstomemoststrangethatmenshouldfearSeeingthatdeathanecessar_endWillcomewhenitwillcome 

Desired Output: COWARDS DIE MANY TIMES BEFORE THEIR DEATHS; THE VALIANT NEVER TASTE 
OF DEATH BUT ONCE. OF ALL THE WONDERS THAT I YET HAVE HEARD, IT 
SEEMS TO ME MOST STRANGE THAT MEN SHOULD FEAR; SEEING THAT DEATH, A 
NECESSARY END, WILL COME WHEN IT WILL COME. 
+0

は、だから、それがアルファベット以外の文字をスキップするようにする方法を知りたいですか?あなたはいくつかの入力、現在の出力と希望の出力を投稿できますか? – TemporalWolf

答えて

0

あなたはあなたの答えにそれらを転写する必要があります。

for char in unciphered_text: 
    if char.isalpha(): 
     cipher_process = ord(char.upper()) + shift_distance 
     if cipher_process > ord('Z'): 
      cipher_process -= 26 
     if cipher_process < ord('A'): # Deal with underflow 
      cipher_process += 26 
     post_translation = chr(cipher_process) 
     ciphered_text += post_translation 
    else: # skip, but include non-alphabetic characters 
     ciphered_text += char 

はまた、あなたが大文字に変換する文字を.upper()、およびA下の文字のアンダーフローに対処する必要があります。

サンプル出力(事実の後に追加リターン):

COWARDS DIE MANY TIMES BEFORE THEIR DEATHS; THE VALIANT NEVER TASTE 
OF DEATH BUT ONCE. OF ALL THE WONDERS THAT I YET HAVE HEARD, IT SEEMS 
TO ME MOST STRANGE THAT MEN SHOULD FEAR; SEEING THAT DEATH, A NECESSARY 
END, WILL COME WHEN IT WILL COME 
+0

ありがとうございます。私の出力はかなり読みやすくなっています。しかし出力が 'y'を出力するところでは、代わりに " - "が出力されます。ここに私が意味するものがあります – Amaranthus

+0

臆病者は彼らの死の前にman_回死ぬ;勇敢な決して死の味はありませんが一度。私が聞いたすべての驚異の中で、男性が恐れるべきであることは私には最も奇妙なようです。その死を見て、必要不可欠な終わりが来たら来るでしょう – Amaranthus

+0

ありがとう、そんなにうまくいってくれてありがとう! – Amaranthus