如何解决“ ord()预期字符,但找到长度为0的字符串”的Python错误

时间:2019-05-28 21:44:13

标签: python

我的程序必须使用凯撒密码对输入消息进行编码。我试图通过在字符串之间将“ /”分隔成许多字母。然后,实际上所有东西都起作用了(按照我的想法)。最终,当一条消息接近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()

3 个答案:

答案 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', '']

最后一个''是给您错误的原因。有很多方法可以解决它,但是我认为跳过/分隔符,像其他几个人一样使用输入字符串可能是最好的选择。