2013-08-16 31 views
-1

這是我的任務: 編寫一個解密祕密消息的程序。解密炒字母?

它應該首先提示用戶輸入拼音字母。然後它應該要求祕密消息。最後,它輸出未加擾的版本。

請注意,正好有26個字符爲亂碼字母輸入。所有的字母字符都被翻譯成它們的解碼等價物(這將需要一個WHILE循環),而所有其他的非字母字符應該與沒有翻譯時一樣輸出。

這是我到目前爲止的代碼:

decrypt = ["*"] * 26 

scram_alphabet = input("Please input the scrambled alphabet in order: ") 

while len(scram_alphabet) != 26: 
    scram_alphabet = input("Please input the scrambled alphabet in order. The alphabet must have 26 characters: ") 

num = 0 

for each_letter in scram_alphabet: 
    decrypt[num] = ord(each_letter) 
    num = num + 1 

print() 
print() 

msg = input("Now input your scrambled message: ") 

print() 
print() 

num = 0 

alphabet = [" "] * 26 
for letter in range (26): 
    alphabet[letter] = letter + 65 

while num < 26: 
    alphabet [num] = decrypt [num] 
    print(chr(alphabet[num])) 
    num = num + 1 


for alpha in msg.upper(): 
    if alpha < "A" or alpha > "Z": 
     print(alpha,end="") 
    else: 
     print(chr(decrypt[ ord(alpha) - 65 ]), end="") 

我似乎無法弄清楚如何使用while循環解擾字母表。

目前如果我輸入'XQHAJDENKLTCBZGUYFWVMIPSOR'作爲字母和'VNKW KW BO 1WV WJHFJV BJWWXEJ!'作爲祕密消息,該程序打印出亂碼字母和一個「解讀」消息,讀取「IZTP TP QG 1PI PLNDLI QLPPSJL!」。解密的消息實際上是「這是我的第一個祕密消息!」

任何助手?

+2

我以爲你說你的課是在2天前,2天前結束。你還有功課嗎? – user2357112

+0

是。 hw在決賽後的第二天。 – user2680935

回答

3

您正在映射方向錯誤。例如,我們來看第一個字母。 V應該變成T,但是爲什麼?

答案是因爲V在字母表中佔據的位置是T通常佔據的位置。相反,你正在尋找V將在字母表中佔據的位置,並替換該字母,即I。

總之,您當前的程序是一個擾碼器,而不是解擾器,只是第二次加擾消息。例如,如果我用同樣的字母,而是提供原始消息,結果我得到的是相同的,你所提供的加密的消息:

Please input the scrambled alphabet in order: 'XQHAJDENKLTCBZGUYFWVMIPSOR' 
Now input your scrambled message: 'THIS IS MY 1ST SECRET MESSAGE!' 
VNKW KW BO 1WV WJHFJV BJWWXEJ! 

這就是問題之行:

decrypt[num] = ord(each_letter) 

相反,你需要建立地圖向相反的方向:

decrypt[ord(each_letter) - 65] = num + 65 

現在程序的工作原理:

Please input the scrambled alphabet in order: 'XQHAJDENKLTCBZGUYFWVMIPSOR' 
Now input your scrambled message: 'VNKW KW BO 1WV WJHFJV BJWWXEJ!' 
THIS IS MY 1ST SECRET MESSAGE! 
0

從我可以告訴,它看起來像你的腳本運行正常。未解碼的消息似乎不是「這是我的第一個祕密消息!」

這是我沒有使用字母部分手工翻譯:

Key: XQHAJDENKLTCBZGUYFWVMIPSOR 
    ABCDEFGHIJKLMNOPQRSTUVWXYZ 

Original: VNKW KW BO 1WV WJHFJV BJWWXEJ! 
Translated: IZTP ... 

它看起來像你需要一個不同的例子來進行測試,或者是我誤解是如何被執行加擾。