为什么我的函数不断返回None而不是True或False?

时间:2020-07-22 18:04:05

标签: python recursion nonetype

我目前正在Python类中从事递归工作,遇到了这个问题。这两个函数通过检查字符串a是否为字符串b的子字符串一起工作。如果字符串a是字符串b的子字符串,则程序应返回True。如果不是,则返回False。但是,当我尝试执行程序时,返回的唯一值是“无”。我对做什么感到困惑。谢谢!

def is_subsequence(string_a, string_b):
    pos_a = 0
    pos_b = 0
    contains_string(string_a, string_b, pos_a, pos_b)

def contains_string(string_a, string_b, pos_a, pos_b):
    if(pos_a == len(string_a) - 1):
        return True
    if(pos_b == len(string_b) - 1):
        return False
    if(string_a[pos_a] != string_b[pos_b]):
        pos_b = pos_b + 1
        return contains_string(string_a, string_b, pos_a, pos_b)
    if(string_a[pos_a] == string_b[pos_b]):
        pos_a = pos_a + 1
        pos_b = pos_b + 1
        return contains_string(string_a, string_b, pos_a, pos_b)
    else:
        return False

3 个答案:

答案 0 :(得分:1)

没有显式,您的函数is_subsequence将返回None。这是所有函数的默认Python属性。将功能更改为:

def is_subsequence(string_a, string_b):
    pos_a = 0
    pos_b = 0
    return contains_string(string_a, string_b, pos_a, pos_b)

答案 1 :(得分:0)

您的contains_string返回的是True或False,但是调用contains_string的主函数只是调用该函数,但不返回任何内容。因此,结果是无。

Python函数具有默认的返回值,如果没有给出返回表达式,或者仅给出了单独的return,则为None


只需将语句更改为return contains_string(string_a, string_b, pos_a, pos_b),它将正常工作。您最后的主要功能应该是-

def is_subsequence(string_a, string_b):
    pos_a = 0
    pos_b = 0
    return contains_string(string_a, string_b, pos_a, pos_b)

答案 2 :(得分:0)

您的主函数(is_subsequence)没有返回任何值,因此您在执行程序时得到None。它需要返回从contains_string方法获得的值。 您的is_subsequence方法应类似于:

def is_subsequence(string_a, string_b):
    pos_a = 0
    pos_b = 0
    return contains_string(string_a, string_b, pos_a, pos_b)