Vigenere 密码没有错误消息 Python

Vigenere Cipher no error message Python

这是维吉尼亚密码的代码:

BASE = ord("A") #65
print("Welcome to the keyword encrypter and decrypter!")
msg = ("FUN")
keyword = ("RUN")
list_out = []

for letter in msg:
    a = (ord(letter) - (BASE)) #67 - 65 = 2

for character in keyword:
    b = (ord(character) - (BASE)) #72 - 65 = 7
    list_out.append(BASE + a + b) #65 + 2 + 7 = 74
("".join(str(list_out)))

我正在尝试从消息中获取每个字母,并从 65(即 BASE)中单独取出关键字。然后最后我希望将 BASE 添加到 a 和 b 的结果中。我想要将新字母附加到列表中并打印出来。如果有人能提供帮助,我们将不胜感激。

上面我说明了程序应该如何工作,但是我不确定 problem/problems 是什么。我的代码的主要问题是没有打印任何内容。

您在列表上调用 join 来连接内容,而不是 str(list),您正在将列表本身转换为 str 并在其上调用 join,而不是实际的列表。

在您的案例中,您需要将每个 int 映射到一个 str

"".join(map(str,list_out))

相当于"".join([str(x) for x in list_out ])

如果您想将 ord 更改为字符,您可以映射到 chr:

"".join(map(chr,(list_out)))

哪些可以在一次理解中完成:

print("".join([chr(BASE + a + (ord(ch) - (BASE))) for ch in keyword)])

您也只在上一个循环中使用 a 的最后一个值,因为您每次迭代都分配一个新值,具体取决于您可能需要执行的操作 += 或嵌套循环:

for letter in msg:
    # will be equal to  (ord(N) - (BASE))
    a = (ord(letter) - (BASE)) #67 - 65 = 2