2015-04-13 2 views
2

Проблема заключается в том:Цезарь 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».

У меня есть:

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, что для меня не имеет смысла. Для проблемы это должно вывести больше, чем это правильно?

+1

Добро пожаловать в StackOverflow, вы можете быть немного более конкретно о том, что ваш вопрос, как ваша программа потерпит неудачу? Кроме того, нам нужно знать, на каком языке вы используете, можете ли вы изменить свой вопрос, чтобы добавить информацию о tat? – mmgross

+0

Если это действительно ваш код, то уровни отступов дают ему существенно различную семантику, чем то, что вы, вероятно, намеревались ... И, фактически, в любом файле, который содержит только знаки препинания или пробела, вы получите 'NameError', потому что вы есть путь к коду, в котором вы можете ввести свой 'while (found == False)' loop с 'found', который никогда не был определен ... Это может быть так, даже с исправлением отступов. – twalberg

ответ

0

Ваш блок должен быть отступом три раза.
За исключением числа + = 1, которое должно быть на один блок меньше, чем его соседи

И внутри блока while вообще не используется тот факт, что ключевая строка является словарем.

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)