2017-02-20 12 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 

左の列には、平文の文字を表し、右側の列には、対応する暗号文を表します。 プログラムは "encrypted.txt"ファイルを "key.txt"を使用してデコードし、平文を "decrypted.txt"に書き込む必要があります。 あなたのプログラムは、2つのキーファイル(またはキーの複製)を持たずに、暗号化された大文字と小文字の両方を処理する必要があります。復号化されたテキストは、すべて大文字にすることができます。 キーファイルにない暗号化されたテキストの文字を処理できるはずです。その場合、復号化に文字を繰り返すようにしてください。これにより、暗号化されたテキストにスペースを残して、解読する際にスペースを残すことができます。 キーファイルを作成するプログラムを作成することもできますが、提出物にキーファイルを含めないでください。暗号化された主要なテキストファイルを手動で作成することができます。 Pythonシェルの "新しいファイル"オプション(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

以下の手順に従ってください:**あなたのプログラムは、2つのキーファイル(またはキーの複製)を持たずに、暗号化された大文字と小文字の両方を扱う必要があります。** – 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

ありがとうございます!それはただのことでした! –