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的主要内容,如果未能解决你的问题,请参考以下文章