2017-02-20 56 views
0

我似乎無法得到這個程序我應該爲一個項目,以輸出正確的輸出做,即使我試圖得到它的工作多次。該項目是:Python的凱撒密碼的項目,不正確的輸出

您的程序需要解碼一個名爲「encrypted.txt」的加密文本文件。編寫它的人使用「key.txt」中指定的密碼。此密鑰文件將類似於以下內容:

A    B 
B    C 
C    D 
D    E 
E    F 
F    G 
G    H 
H    I 
I    J 
J    K 
K    L 
L    M 
M    N 
N    O 
O    P 
P    Q 
Q    R 
R    S 
S    T 
T    U 
U    V 
V    W 
W    X 
X    Y 
Y    Z 
Z    A 

左列代表明文字母,右列表示對應的密文。 你的程序應該使用「key.txt」解碼「encrypted.txt」文件,並寫入了明文「decrypted.txt」。 你的程序應該處理加密的大寫和小寫字母,而不需要兩個密鑰文件(或複製密鑰)。您可能擁有全部大寫的解密文本。 您應該能夠處理加密文本中不在密鑰文件中的字符。在這種情況下,只需要解密重複該字符。這將允許您在加密文本中有空格,並在解密時保留空格。 雖然你可能編寫一個程序來創建密鑰文件 - 不要在提交中包含它。您可以手動創建加密和密鑰文本文件。使用Python Shell中的「新文件」選項(不要忘記保存爲txt)或編輯器(如記事本)。不要用字。

這裏是我的代碼:

keyFile = open("key.txt", "r") 
keylist1= [] 
keylist2 = [] 

for line in keyFile: 
    keylist1.append(line.split()[0]) 
    keylist2.append(line.split()[1]) 
keyFile.close() 
encryptedfile = open("encrypted.txt", "r") 
lines = encryptedfile.readlines() 
currentline = "" 
decrypt = "" 
for line in lines: 
    currentline = line 
    letter = list(currentline) 
    for i in range(len(letter)): 
    currentletter = letter[i] 
    if not letter[i].isalpha(): 
     decrypt += letter[i] 
    else: 
     for o in range(len(keylist1)): 
     if currentletter == keylist1[o]: 
      decrypt += keylist2[o] 
print(decrypt) 

我得到的唯一的輸出是:

,?

這是不正確。

+0

您的密鑰文件只包含大寫字母,但'encrypted.txt'包含小寫,而你不轉換的情況下。 – Barmar

+0

這是正確的,在說明:**,你的程序應該處理在加密的大寫和小寫字母,而無需兩個關鍵文件(或複製鍵)** – Barmar

+0

不是搜索列表,使用字典。 – Barmar

回答

0

你忘了處理小寫字母。使用upper()將所有內容轉換爲常見情況。

這也將是更好地使用,而不是對列表的字典。

mapping = {} 
with open("key.txt", "r") as keyFile: 
    for line in keyFile: 
     l1, l2 = line.split() 
     mapping[upper(l1)] = upper(l2) 
decrypt = "" 
with open("encrypted.txt", "r") as encryptedFile: 
    for line in encryptedFile: 
     for char in line: 
      char = upper(char) 
      if char in mapping: 
       decrypt += mapping[char] 
      else: 
       decrypt += char 
print(decrypt) 
+0

謝謝!那只是做了那件事! –