首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何修复Python中"ord()需要一个字符,但找到长度为0的字符串“错误

如何修复Python中"ord()需要一个字符,但找到长度为0的字符串“错误
EN

Stack Overflow用户
提问于 2019-05-29 05:44:13
回答 3查看 427关注 0票数 0

我的程序必须使用凯撒密码对输入消息进行编码。我试图将字符串分割为多个字母,方法是在它们之间加上"/“。然后,实际上,一切都起作用了(正如我所想的)。最后,当消息更接近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()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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)
票数 0
EN

Stack Overflow用户

发布于 2019-05-29 06:05:23

你不需要load和被'/‘拆分。您添加额外的字符只是为了拆分和删除它们。更糟糕的是,在这种情况下,在您添加/之后,您现在留下了一个尾随的/,所以当您拆分()时,最后一部分是一个空格字符。

因此,删除第一个for循环并直接切换到下一个循环。如果你仍然看到这个问题,那么可能是input()给了你尾随字符,所以你看到的错误是有意义的。

只需运行input("The message").trimspace()来删除尾随的空格字符,代码就应该可以工作了。你可以单独优化你的代码,但问题一定是这样的。

票数 0
EN

Stack Overflow用户

发布于 2019-05-29 06:13:39

在第一个for循环中,总是将一个/字符附加到字符串的末尾,这意味着在最后一个字符串的末尾有一个尾随的/。当您执行load.split('/')时,末尾的字符串会向右拆分,留下一个空字符串,这会抛出一个错误,因为您正在尝试获取ord of nothing:

下面是我正在讨论的代码示例:

>>> "o/".split('/')
['o', '']

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56350424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档