Vigenere Cipher没有错误信息Python

时间:2015-03-01 12:10:22

标签: python python-3.x encryption vigenere

以下是Vigenere Cipher的代码:

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的结果中。我希望将新信附加到列表中并打印出来。如果有人可以提供帮助,我们将不胜感激。

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

1 个答案:

答案 0 :(得分:1)

你在列表上调用join来加入内容,而不是str(list),你将列表本身转换为str并在那个上调用join,而不是实际的列表。

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

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

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

如果您想将ord&s更改为chars,可以映射到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