2024-05-15 09:57:44 发布
网友
定义SRM(stringToReverse): 如果len(stringToReverse)==0或stringToReverse==无: 返回 return stringToReverse[len(stringToReverse)-1]+SRM(stringToReverse[:len(stringToReverse)-1] #打印(temp,end='')enter code here SRM(“我叫汗”)
enter code here
我猜这是一个家庭作业问题,我知道你在寻找“如何使用递归来反转字符串”。在
首先,正如很多人提到的,请把所有的“str”去掉,换成“myStr”之类的。你不想掩饰任何内在的东西。在
其次,你的递归逻辑有问题。在
问题1:基本情况。当函数遍历字符串并以空字符串结尾时,您希望它返回什么?为什么返回不返回任何内容?请将第3行更正为return ""。在
return ""
问题2:函数返回NoneType。这是因为递归的情况是有问题的。您的print正在尝试将str[len(str) - 1]的字符串与rev(str[:len(str) - 1])的结果连接起来,但后一部分不是return的字符串,它什么都不是!你为什么打印,却不返回?将您的print替换为return,这样递归调用实际上会为您生成一个字符串,稍后可以与第一个切片字符串组合。在
NoneType
print
str[len(str) - 1]
rev(str[:len(str) - 1])
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行改为:
我会改变的
if len(str) == 0:
到
这会处理一个空字符串和一个空字符串。在
编辑:正如jwodder评论的那样;使用str的另一个名称(rev_string或类似的名称)
我猜这是一个家庭作业问题,我知道你在寻找“如何使用递归来反转字符串”。在
首先,正如很多人提到的,请把所有的“str”去掉,换成“myStr”之类的。你不想掩饰任何内在的东西。在
其次,你的递归逻辑有问题。在
问题1:基本情况。当函数遍历字符串并以空字符串结尾时,您希望它返回什么?为什么返回不返回任何内容?请将第3行更正为
return ""
。在问题2:函数返回
NoneType
。这是因为递归的情况是有问题的。您的print
正在尝试将str[len(str) - 1]
的字符串与rev(str[:len(str) - 1])
的结果连接起来,但后一部分不是return
的字符串,它什么都不是!你为什么打印,却不返回?将您的print
替换为return
,这样递归调用实际上会为您生成一个字符串,稍后可以与第一个切片字符串组合。在所以代码应该如下所示,但是,请完全理解递归逻辑。否则下一个问题就会陷入递归。在
如果不向函数传递字符串,则str变量为None。 像那样调用你的函数
可能会产生你的错误。 将第2行改为:
^{pr2}$我会改变的
到
^{pr2}$这会处理一个空字符串和一个空字符串。在
编辑:正如jwodder评论的那样;使用str的另一个名称(rev_string或类似的名称)
相关问题 更多 >
编程相关推荐