-1

这是 Vigenere 密码的代码:

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

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

4

1 回答 1

1

您在列表上调用 join 以加入内容,而不是 str(list),您将列表本身转换为 str 并在其上调用 join,而不是实际列表。

您需要将每个映射intstr您的情况。

"".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
于 2015-03-01T12:41:46.080 回答