我的程序必须使用凯撒密码对输入消息进行编码。我试图通过在字符串之间将“ /”分隔成许多字母。然后,实际上所有东西都起作用了(按照我的想法)。最终,当一条消息接近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()
答案 0 :(得分:0)
您必须执行以下操作:
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)
答案 1 :(得分:0)
您不需要load
并用'/'分隔。您添加了额外的字符只是为了拆分和删除它们。更糟糕的是,在这种情况下,添加/
后,现在剩下的结尾是/
,因此,当您拆分()时,最后一部分是空白字符。
因此直接删除第一个for
循环并剪切到下一个循环。如果仍然出现问题,则可能是input()
给您尾随字符,因此您看到的错误是有道理的。
只需运行input("The message").trimspace()
即可删除结尾的空白字符,并且代码应该可以正常工作。您可以单独优化代码,但是问题必须是这个。
答案 2 :(得分:0)
在您的第一个for
循环中,您总是在字符串的末尾附加一个/
字符,这意味着您在最终字符串的末尾有一个结尾的/
。当您执行load.split('/')
时,末尾的字符串会向右拆分,最后留给您一个空字符串,这会引发错误,因为您尝试获取的是ord
一无所有:
这是我所谈论的代码示例:
>>> "o/".split('/')
['o', '']
最后一个''
是给您错误的原因。有很多方法可以解决它,但是我认为跳过/
分隔符,像其他几个人一样使用输入字符串可能是最好的选择。