2

問題は:

プログラムは、「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」に書き込む必要があります。

私は持っている:

decrypt = ""
keyfile = open("key.txt", "r")
cipher = {}

for keyline in keyfile:
    cipher[keyline.split()[0]] = keyline.split()[1]
keyfile.close()
encrypt = []
encryptedfile = open("encrypted.txt", "r")
readlines = encryptedfile.readlines()
str = ""

for line in readlines:
    str = line
    letter = list(str)
    for i in range(len(letter)):
        if letter[i]==",":
            decrypt += ","
        elif letter[i] == ".":
            decrypt+= "."
        elif letter[i] == "!":
            decrypt += "!"
        elif letter[i] == " ":
            decrypt += " "
        else:
            found = False
            count = 0

while (found == False):
    if (letter[i] == keyline.split()[0][count]):
        decrypt += keyline.split()[1][count]
        found = True
        count += 1
        print decrypt

encryptedfile.close()
decryptedfile = open("decrypted.txt", "w")
decryptedfile.write(decrypt)
decryptedfile.close()

これは Python 言語です。出力により、decrypted.txt というタイトルのファイルが作成されますが、ファイル内にあるのは A だけであり、私には意味がありません。問題の場合、それ以上の出力が必要ですか?

4

2 に答える 2

1

enrcypted.txtで与えられた鍵でファイルを解読しkey.txt、結果を に保存しdecrypted.txtます。

with open('key.txt', 'r') as keyfile:                                           
    pairs = [line.split() for line in keyfile]                                  
    columns = [''.join(x) for x in zip(*pairs)]                                 
    # Or to make it work with lower case letters as well:                       
    # columns = [''.join(x)+''.join(x).lower() for x in zip(*pairs)]            
    key = str.maketrans(                                                        
            *reversed(columns)                                                  
            )                                                                   

with open('encrypted.txt', 'r') as encrypted_file:                              
    decrypted = [line.translate(key) for line in encrypted_file]                

with open('decrypted.txt', 'w') as decrypted_file:
    decrypted_file.writelines(decrypted) 
于 2015-04-13T20:18:32.513 に答える
0

while ブロックは 3 回インデントする必要があります。
count += 1 を除き、これは隣接するブロックよりも 1 ブロック少なくする必要があります

そして、while ブロックの内部では、キーラインが辞書であるという事実をまったく使用していません。

于 2015-04-13T19:29:37.433 に答える