【问题标题】:Why do I get None instead of True/False in python? [duplicate]为什么我在 python 中得到 None 而不是 True/False? [复制]
【发布时间】:2013-10-21 15:24:59
【问题描述】:

我正在尝试编写一个函数来检查字符串中的字符是否使用递归进行排序。这是我想出的:

def is_sorted(x,i):
    if i >= len(x):
        return True
    elif x[i] <= x[i-1]:
        return False
    else:
        is_sorted(x,i+1)

我用这些来测试我的功能:

x = "abcadef"
y = "aabcdef"
z = "abcdef"
print is_sorted(x, 1)
print is_sorted(y, 1)
print is_sorted(z, 1)

我希望得到 False、False、True,但结果却是 None、False、None。为什么? :(

【问题讨论】:

    标签: python


    【解决方案1】:

    您在最后一个 else 子句中没有返回任何内容。因此结果。

    def is_sorted(x,i):
        if i >= len(x):
            return True
        elif x[i] <= x[i-1]:
            return False
        else:
            return is_sorted(x,i+1)
    

    演示:

    >>> def is_sorted(x,i):
    ...     if i >= len(x):
    ...         return True
    ...     elif x[i] <= x[i-1]:
    ...         return False
    ...     else:
    ...         return is_sorted(x,i+1)
    ... 
    >>> x = "abcadef"
    >>> y = "aabcdef"
    >>> z = "abcdef"
    >>> print is_sorted(x, 1)
    False
    >>> print is_sorted(y, 1)
    False
    >>> print is_sorted(z, 1)
    True
    >>> 
    

    【讨论】:

    • 谢谢!如此简单,但又如此有用:)
    【解决方案2】:

    您需要返回函数以将其传递到递归链

    def is_sorted(x,i):
        if i >= len(x):
            return True
        elif x[i] <= x[i-1]:
            return False
        else:
            return is_sorted(x,i+1) # <---- Here
    

    【讨论】:

      猜你喜欢
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 2023-02-23
      • 2022-07-16
      • 2015-07-17
      相关资源
      最近更新 更多