Vigenere 密码没有错误消息 Python
Vigenere Cipher no error message Python
这是维吉尼亚密码的代码:
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 的结果中。我想要将新字母附加到列表中并打印出来。如果有人能提供帮助,我们将不胜感激。
上面我说明了程序应该如何工作,但是我不确定 problem/problems 是什么。我的代码的主要问题是没有打印任何内容。
您在列表上调用 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
这是维吉尼亚密码的代码:
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 的结果中。我想要将新字母附加到列表中并打印出来。如果有人能提供帮助,我们将不胜感激。
上面我说明了程序应该如何工作,但是我不确定 problem/problems 是什么。我的代码的主要问题是没有打印任何内容。
您在列表上调用 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