Python stringTypeError:必须是str,而不是NoneTyp

2024-05-15 09:57:44 发布

您现在位置:Python中文网/ 问答频道 /正文

定义SRM(stringToReverse): 如果len(stringToReverse)==0或stringToReverse==无: 返回 return stringToReverse[len(stringToReverse)-1]+SRM(stringToReverse[:len(stringToReverse)-1] #打印(temp,end='')enter code here SRM(“我叫汗”)


Tags: lenreturnhere定义codetempendenter
3条回答

我猜这是一个家庭作业问题,我知道你在寻找“如何使用递归来反转字符串”。在

首先,正如很多人提到的,请把所有的“str”去掉,换成“myStr”之类的。你不想掩饰任何内在的东西。在

其次,你的递归逻辑有问题。在

问题1:基本情况。当函数遍历字符串并以空字符串结尾时,您希望它返回什么?为什么返回不返回任何内容?请将第3行更正为return ""。在

问题2:函数返回NoneType。这是因为递归的情况是有问题的。您的print正在尝试将str[len(str) - 1]的字符串与rev(str[:len(str) - 1])的结果连接起来,但后一部分不是return的字符串,它什么都不是!你为什么打印,却不返回?将您的print替换为return,这样递归调用实际上会为您生成一个字符串,稍后可以与第一个切片字符串组合。在

所以代码应该如下所示,但是,请完全理解递归逻辑。否则下一个问题就会陷入递归。在

def rev(x):
    if len(x) == 0:
        return ""
    return x[len(x) - 1] + rev(x[:len(x) - 1])

print(rev("ABC DEF"))
# Correctly prints: FED CBA.

如果不向函数传递字符串,则str变量为None。 像那样调用你的函数

rev()

可能会产生你的错误。 将第2行改为:

^{pr2}$

我会改变的

if len(str) == 0: 

^{pr2}$

这会处理一个空字符串和一个空字符串。在

编辑:正如jwodder评论的那样;使用str的另一个名称(rev_string或类似的名称)

相关问题 更多 >