递归返回无类型?

时间:2017-11-09 17:19:41

标签: python python-3.x

我写了一个找到问题超级数字的程序,IE:9876 = 9 + 8 + 7 + 6 = 30 = 3 + 0 =超级数字= 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)

2 个答案:

答案 0 :(得分:2)

  

return语句会导致函数退出并返回a   对其来电者的价值。一般来说,功能的关键在于接受   输入并返回一些内容。

好的,默认情况下&#39;返回&#39;给出无,所以在您的情况下,您将返回&#39;如果&#39;条件为True时条件的第一部分,但条件为何时返回的地方为“其他”条件。一部分?

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

答案 1 :(得分:1)

你忘记了回复声明:

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)