def SRM(stringToReverse):
如果len(stringToReverse)== 0或stringToReverse == None:
返回
返回stringToReverse [len(stringToReverse)-1] + SRM(stringToReverse [:len(stringToReverse)-1]
#print(temp,end ='')<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="file">
<xsl:apply-templates select="line[1]/entry" mode="group"/>
</xsl:template>
<xsl:template match="entry" mode="group">
<xsl:variable name="index">
<xsl:number format="A" value="position()"/>
</xsl:variable>
<xsl:variable name="pos" select="position()"/>
<xsl:element name="group{$index}">
<xsl:apply-templates select="../../line/entry[position() = $pos]"/>
</xsl:element>
</xsl:template>
<xsl:template match="entry">
<observation value="{.}"/>
</xsl:template>
</xsl:stylesheet>
SRM(“我的名字叫汗”)
答案 0 :(得分:1)
我猜这是一个家庭作业问题,并且我了解您正在寻找“如何使用递归来反转字符串”。
首先,正如许多人提到的那样,请取出所有“ 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.
答案 1 :(得分:0)
如果不将字符串传递给函数,则str变量为None。 像这样调用您的函数
rev()
可能会产生您的错误。 将第2行更改为:
if str is None or len(str) == 0:
答案 2 :(得分:0)
我会改变
if len(str) == 0:
到
if not rev_string:
这将处理None和一个空字符串。
编辑:如jwodder所评论;为str使用另一个名称(rev_string或类似名称)
答案 3 :(得分:0)
您还可以使用扩展切片的功能:
def reverser(s=None):
if not s:
return ''
return s[::-1]