2017-02-20 5 views
0

나는이 프로그램을 여러 번 작동 시키려고했지만 올바른 출력을 출력하기 위해 프로젝트를 수행한다고 생각하지 않습니다. 프로젝트는 다음과 같습니다 :Python Caesar Cipher 프로젝트, 잘못된 출력

프로그램은 "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의 "new file"옵션 (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

감사합니다. 그게 그냥 해냈어! –