2017-02-20 4 views
0

Ich kann nicht scheinen, dieses Programm zu bekommen, das ich für ein Projekt tun sollte, um die korrekte Ausgabe auszugeben, obwohl ich versucht habe, es mehrmals zu arbeiten. Das Projekt lautet:Python Caesar Cipher Projekt, falsche Ausgabe

Ihr Programm muss eine verschlüsselte Textdatei namens "encrypted. Txt" dekodieren. Die Person, die sie schrieb, verwendete eine Chiffre, die in "key.txt" spezifiziert wurde. Diese Schlüsseldatei aussehen würde, ähnlich der folgenden:

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 

Die linke Spalte stellt den Klartextbuchstabe, und die rechte Spalte zeigt die entsprechenden chiffrierten Text. Ihr Programm sollte die Datei "encrypted.txt" mit "key.txt" dekodieren und den Klartext in "decrypted.txt" schreiben. Ihr Programm sollte Groß- und Kleinbuchstaben in der verschlüsselten ohne zwei Schlüsseldateien (oder Duplizieren von Schlüsseln) behandeln. Möglicherweise haben Sie den entschlüsselten Text in Großbuchstaben. Sie sollten Zeichen im verschlüsselten Text verarbeiten können, die nicht in Ihrer Schlüsseldatei enthalten sind. In diesem Fall muss nur die Entschlüsselung das Zeichen wiederholen. Dadurch können Sie in Ihrem verschlüsselten Text Leerzeichen einfügen, die bei der Entschlüsselung Leerzeichen bleiben. Während Sie ein Programm schreiben können, um die Schlüsseldatei zu erstellen - fügen Sie das NICHT in die Einreichung ein. Sie können die verschlüsselten und die wichtigsten Textdateien manuell erstellen. Verwenden Sie entweder die Option "new file" in Python Shell (vergessen Sie nicht, als txt zu speichern) oder einen Editor wie Notepad. Benutze kein Wort.

Hier ist mein Code:

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) 

Der einzige Ausgang ich erhalte, ist:

,?

was falsch ist.

+0

Ihre Schlüsseldatei enthält nur Großbuchstaben, aber die 'encrypted.txt' enthält Kleinbuchstaben und Sie konvertieren die Groß-/Kleinschreibung nicht. – Barmar

+0

Es ist genau dort in der Anleitung: ** Ihr Programm sollte Groß-und Kleinbuchstaben in der verschlüsselten ohne zwei Schlüsseldateien (oder Duplizieren von Schlüsseln) behandeln. ** – Barmar

+0

Verwenden Sie ein Wörterbuch statt einer Suche nach einer Liste. – Barmar

Antwort

0

Sie haben vergessen, Kleinbuchstaben zu behandeln. Verwenden Sie upper(), um alles in einen allgemeinen Fall zu konvertieren.

Es wäre auch besser, ein Wörterbuch anstelle von zwei Listen zu verwenden.

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

Danke! Das hat genau das Richtige gemacht! –

Verwandte Themen