以下是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的结果中。我希望将新信附加到列表中并打印出来。如果有人可以提供帮助,我们将不胜感激。
上面我说明了程序应该如何工作但是我不确定问题是什么。我的代码的主要问题是没有任何内容正在打印。
答案 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