Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Caesar密码项目,输出不正确_Python_Encryption_Cryptography_Caesar Cipher - Fatal编程技术网

Python Caesar密码项目,输出不正确

Python Caesar密码项目,输出不正确,python,encryption,cryptography,caesar-cipher,Python,Encryption,Cryptography,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

我似乎无法让我应该为一个项目执行的这个程序输出正确的输出,即使我已经多次尝试让它工作。该项目是:

您的程序需要解码一个名为“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”。 您的程序应该处理加密格式中的大写和小写字母,而不需要两个密钥文件(或复制密钥)。您可以在所有大写字母中使用解密文本。 您应该能够处理加密文本中不在密钥文件中的字符。在这种情况下,只需让解密重复该字符。这将允许您在加密文本中保留空格,在解密时保留空格。 虽然您可以编写一个程序来创建密钥文件,但不要将其包含在提交中。您可以手动创建加密和密钥文本文件。使用pythonshell中的“newfile”选项(别忘了另存为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)
我得到的唯一输出是:


这是不正确的

你忘了处理小写字母。使用
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)

您的密钥文件只包含大写字母,但
encrypted.txt
包含小写字母,您不需要转换大小写。说明中就有:您的程序应该在加密的密钥文件中同时处理大写字母和小写字母,而不需要两个密钥文件(或复制密钥)。与其搜索列表,使用字典。谢谢!真是太棒了!