我的程序必须使用凯撒密码对输入消息进行编码。我试图将字符串分割为多个字母,方法是在它们之间加上"/“。然后,实际上,一切都起作用了(正如我所想的)。最后,当消息更接近chr(ord(ch)+ 2)时,会弹出一个错误。我该如何解决这个问题呢?
def main():
print("This program will encode your messages using a Caesar Cipher")
message = input("Enter the message: ")
load = ("")
codedMessage = ("")
for i in message:
load = load + i + "/"
''.join(load)
for ch in load.split("/"):
codedMessage = codedMessage + chr(ord(ch)+ 2)
print("The coded message is:", codedMessage)
main()
发布于 2019-05-29 05:55:54
您必须这样做:
print("This program will encode your messages using a Caesar Cipher")
message = input("Enter the message: ")
codedMessage = ""
for ch in message:
codedMessage = codedMessage + chr(ord(ch) + 2)
print("The coded message is:", codedMessage)
发布于 2019-05-29 06:05:23
你不需要load
和被'/‘拆分。您添加额外的字符只是为了拆分和删除它们。更糟糕的是,在这种情况下,在您添加/
之后,您现在留下了一个尾随的/
,所以当您拆分()时,最后一部分是一个空格字符。
因此,删除第一个for
循环并直接切换到下一个循环。如果你仍然看到这个问题,那么可能是input()
给了你尾随字符,所以你看到的错误是有意义的。
只需运行input("The message").trimspace()
来删除尾随的空格字符,代码就应该可以工作了。你可以单独优化你的代码,但问题一定是这样的。
发布于 2019-05-29 06:13:39
在第一个for
循环中,总是将一个/
字符附加到字符串的末尾,这意味着在最后一个字符串的末尾有一个尾随的/
。当您执行load.split('/')
时,末尾的字符串会向右拆分,留下一个空字符串,这会抛出一个错误,因为您正在尝试获取ord
of nothing:
下面是我正在讨论的代码示例:
>>> "o/".split('/')
['o', '']
最后一个''
是给您提供错误的原因。有很多方法可以修复它,但我认为跳过/
分隔符,像其他一些人所说的那样只使用输入字符串可能是最好的选择。
https://stackoverflow.com/questions/56350424
复制相似问题