为什么我在python中得到None而不是True / False?

时间:2013-10-21 15:24:59

标签: python

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

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。为什么? :(

2 个答案:

答案 0 :(得分:6)

您没有在最后一个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
>>> 

答案 1 :(得分: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