【问题标题】:Recursion returning None type? [duplicate]递归返回 None 类型? [复制]
【发布时间】:2018-04-22 19:23:09
【问题描述】:

我写了一个程序找到问题的超级数字,IE:9876 = 9+8+7+6 = 30 = 3+0 = super digit = 3 每当程序不调用自身时,这都可以正常工作,但在上述情况下,我会得到一个最终的整数值 3,它会这样打印,但是当我返回它时,它返回 None。我想知道为什么会这样?

代码如下:

def super_digit(n):
    sup_Digit = 0
    intArray = [int(i) for i in str(n)]
    for i in range(len(intArray)):
        sup_Digit += intArray[i]
    if sup_Digit and sup_Digit < 10:
        return int(sup_Digit)
    else:
        super_digit(sup_Digit)

这是我的测试用例:

from unittest import TestCase

tc = TestCase()

tc.assertEqual(super_digit(5), 5)
tc.assertEqual(super_digit(30), 3)
tc.assertEqual(super_digit(9876), 3)
tc.assertEqual(super_digit(11111111111111), 5)
tc.assertEqual(super_digit(12345678901234567890), 9)

【问题讨论】:

  • 应该是return super_digit(sup_Digit)
  • 呃,菜鸟的错误。做到了,谢谢。
  • 旁注,第2-5行可以替换为sup_Digit = sum(int(c) for c in str(n))

标签: python python-3.x


【解决方案1】:

return 语句会导致你的函数退出并返回一个 对其调用者的价值。一般来说,功能的重点是吸收 输入并返回一些东西。

好的,所以默认情况下'return'给出None,所以在你的情况下,当条件为True时,你将返回'if'条件的第一部分,但是如果条件进入'else'部分,返回在哪里?

def super_digit(n):
        sup_Digit = 0
        intArray = [int(i) for i in str(n)]
        for i in range(len(intArray)):
            sup_Digit += intArray[i]
        if sup_Digit and sup_Digit < 10:
            return int(sup_Digit)
        else:
            return super_digit(sup_Digit)

    print(super_digit(9876))

输出:

3

【讨论】:

    【解决方案2】:

    你忘记了return语句:

    def super_digit(n):
        sup_Digit = 0
        intArray = [int(i) for i in str(n)]
        for i in range(len(intArray)):
            sup_Digit += intArray[i]
        if sup_Digit and sup_Digit < 10:
            return int(sup_Digit)
        else:
            return super_digit(sup_Digit)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-06
      • 2023-04-09
      • 2019-07-06
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 2013-02-26
      相关资源
      最近更新 更多