Vigenere Cipher 没有错误消息 Python

Posted

技术标签:

【中文标题】Vigenere Cipher 没有错误消息 Python【英文标题】:Vigenere Cipher no error message Python 【发布时间】:2015-03-01 12:10:22 【问题描述】:

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

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

【问题讨论】:

您的问题是什么?你已经有一段代码了,有什么问题? 【参考方案1】:

您在列表上调用 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

【讨论】:

以上是关于Vigenere Cipher 没有错误消息 Python的主要内容,如果未能解决你的问题,请参考以下文章

Vigenere Cipher使用命令行提示

Vigenere-cipher 错误输出

Vigenere Cipher 用于带有空格的句子

PSET 2:Vigenere Cipher 部分工作?

Vigenere Cipher - 莫名其妙的细微差别

Vigenere Cipher Key 未按预期工作