代码之家  ›  专栏  ›  技术社区  ›  Sanjeev kumar

python stringtype错误:必须是str,而不是nonetype

  •  -1
  • Sanjeev kumar  · 技术社区  · 6 年前

    def srm(字符串转换): 如果len(stringtoreverse)==0或stringtoreverse==none: 返回 返回stringtoreverse[len(stringtoreverse)-1]+srm(stringtoreverse[:len(stringtoreverse)-1] #打印(temp,end='') enter code here srm(“我叫Khan”)。

    4 回复  |  直到 6 年前
        1
  •  1
  •   FatihAkici    6 年前

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

    首先,正如很多人提到的,请拿出所有的“str”并用“mystr”或其他东西替换它们。你不想隐藏任何内置的东西。

    第二,递归逻辑有问题。

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

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

    因此,代码应该如下所示,但同样,请完全理解递归逻辑。否则,您将陷入下一个递归问题。

    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.
    
        2
  •  0
  •   Florian H    6 年前

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

    rev()
    

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

    if str is None or len(str) == 0:
    
        3
  •  0
  •   Troma78    6 年前

    我会换的

    if len(str) == 0: 
    

    if not rev_string: 
    

    这将处理无和空字符串。

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

        4
  •  0
  •   Troma78    6 年前

    您还可以使用扩展片的功能:

    def reverser(s=None):
        if not s:
            return ''
        return s[::-1]