在我的課程中,我的任務是創建一個凱撒密碼解碼器,它需要一串輸入並使用字母頻率找到最好的字符串。如果不知道多少意義,但讓問題發佈:Python凱撒密碼解碼器
編寫一個程序,它執行以下操作。首先,它應該讀取一行輸入,這是編碼的消息,並將包含大寫字母和空格。您的程序必須嘗試使用所有26個可能的值S來解碼消息;在這26個可能的原始信息中,打印出最具善意的那一個。 爲方便起見,我們會預先爲您定義的變量letterGoodness,長度26的列表,它等於上述
頻率表中的值我到目前爲止這樣的代碼:
x = input()
NUM_LETTERS = 26 #Can't import modules I'm using a web based grader/compiler
def SpyCoder(S, N):
y = ""
for i in S:
x = ord(i)
x += N
if x > ord('Z'):
x -= NUM_LETTERS
elif x < ord('A'):
x += NUM_LETTERS
y += chr(x)
return y
def GoodnessFinder(S):
y = 0
for i in S:
if x != 32:
x = ord(i)
x -= ord('A')
y += letterGoodness[x]
return y
def GoodnessComparer(S):
goodnesstocompare = GoodnessFinder(S)
goodness = 0
v = ''
for i in range(0, 26):
v = SpyCoder(S, i)
goodness = GoodnessFinder(v)
if goodness > goodnesstocompare:
goodnesstocompare = goodness
return v
y = x.split()
z = ''
for i in range(0, len(y)):
if i == len(y) - 1:
z += GoodnessComparer(y[i])
print(z)
編輯:由Cristian Ciupitu建議更改 請忽略縮進錯誤,它們可能在我複製我的代碼時出現。
的程序是這樣的:
- 就拿輸入,並將其分割成一個列表
- 對於每一個列表值我將其提供給一個善良取景器。
- 它需要字符串的好處,並將其他所有內容進行比較,當有更高的善意時,它會使得更高的善良性比較。
- 它然後我偏移量文本的該字符串,看看優度較高或較低
我不太清楚是哪裏的問題,第一個測試:LQKP OG CV GKIJV DA VJG BQQ
打印正確的消息:JOIN ME AT在由ZOO
然而接下來的測試:UIJT JT乙TBNQMF MJOF PG UFYU GPS EFDSZQUJOH
給出的垃圾字符串:SGHR HRžRZLOKD KHMD NE SDWS ENQ CDBQXOSHMF
當它應該是:這是一個示例文本的DECRYPTIN摹
我知道我必須:
想盡一切移值
獲取字
返回字符串最高善良「善良」。
我希望我的解釋有意義,因爲我現在很困惑。
如果你爲垃圾字符串'SGHR HR Z RZLOKD ...'中的每個字符加1,你會得到'THIS IS A SAMPLE ...',所以它幾乎是正確的。 –
你應該嘗試用有意義的常量替換一些神奇的數字,例如65用'ord('A')',26用'NUM_LETTERS'。順便說一下'GoodnessComparer'你有'range(0,25)'而不是'(0,26)';這是一個錯字還是不是?還有一件事:在GoodnessFinder中,每次只需要'i'是一個空格(''''')時,你不需要執行'ord(i)'。 –
[input()](http://docs.python.org/library/functions.html#input)與'eval(raw_input())'等價,這是沒有意義的,所以用一個普通的' raw_input()'調用。 –