【问题标题】:How come my function keeps returning None instead of True or False?为什么我的函数总是返回 None 而不是 True 或 False?
【发布时间】:2020-07-22 18:04:05
【问题描述】:

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

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

【问题讨论】:

  • 第一个函数中要return contains_string(string_a, string_b, pos_a, pos_b),否则默认返回None

标签: python recursion nonetype


【解决方案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)

【讨论】:

    【解决方案2】:

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

    Python 函数有一个默认返回值,如果没有给出返回表达式,或者只给出自己的返回值,则为 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)
    

    【讨论】:

      【解决方案3】:

      您的主函数 (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)
      

      【讨论】:

        猜你喜欢
        • 2021-03-21
        • 1970-01-01
        • 1970-01-01
        • 2020-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        相关资源
        最近更新 更多