为什么我的get_factors函数给我一个“ TypeError:'NoneType'对象不可迭代”的问题?

时间:2019-03-30 01:28:17

标签: python python-3.x

我正在尝试创建一个函数,该函数可以返回给定数字的所有可能因子。我正在使用递归,但我不知道为什么会收到错误。

我知道错误发生在最后的“ for factor in factor”行。

def get_factors(number: int):

    factors = []

    if number % 2 == 0:  # Checks if number is divisible by all the primes up
        factors.append(2)  # to 19
        factors += get_factors(int(number/2))

    elif number % 3 == 0:
        factors.append(3)
        factors += get_factors(int(number/3))

    elif number % 5 == 0:
        factors.append(5)
        factors += get_factors(int(number/5))

    elif number % 7 == 0:
        factors.append(7)
        factors += get_factors(int(number/7))

    elif number % 11 == 0:
        factors.append(11)
        factors += get_factors(int(number/11))

    elif number % 13 == 0:
        factors.append(13)
        factors += get_factors(int(number/13))

    elif number % 17 == 0:
        factors.append(17)
        factors += get_factors(int(number/17))

    elif number % 19 == 0:
        factors.append(19)
        factors += get_factors(int(number/19))

    else:

        final = [1, number]

        for digit in range(1, int(number/2) + 1):  # Checks that there isn't
            if number % digit == 0:  # a factor prime that isn't listed above. 
                factors.append(digit)

        for factor in factors:
            final += [factor**power for power in range(1, factors.count(factor) + 1)]  # A way to ensure that repeated numbers are turned into factors.

        return sorted(final)

1 个答案:

答案 0 :(得分:0)

将因子存储在全局变量中也许是一种可接受的解决方案(或者您也可以将所有这些代码包装在函数中……)。我拿出退货并将所有factors.append()更改为total_factors.append(),并将factors += get_factors()更改为get_factors()(因为取出后它没有返回值)。 / p>

结果代码:

total_factors = []

def get_factors(number: int):
    factors = []

    if number % 2 == 0:  # Checks if number is divisible by all the primes up
        total_factors.append(2)  # to 19
        get_factors(int(number/2))

    elif number % 3 == 0:
        total_factors.append(3)
        get_factors(int(number/3))

    elif number % 5 == 0:
        total_factors.append(5)
        get_factors(int(number/5))

    elif number % 7 == 0:
        total_factors.append(7)
        get_factors(int(number/7))

    elif number % 11 == 0:
        total_factors.append(11)
        get_factors(int(number/11))

    elif number % 13 == 0:
        total_factors.append(13)
        get_factors(int(number/13))

    elif number % 17 == 0:
        total_factors.append(17)
        get_factors(int(number/17))

    elif number % 19 == 0:
        total_factors.append(19)
        get_factors(int(number/19))

    else:

        final = [1, number]

        for digit in range(1, int(number/2) + 1):  # Checks that there isn't
            if number % digit == 0:  # a factor prime that isn't listed above.
                factors.append(digit)

        for factor in factors:
            final += [factor**power for power in range(1, factors.count(factor) + 1)]  # A way to ensure that repeated numbers are turned into factors.

get_factors(300)
print(total_factors)

输出

  

[2,2,3,5,5]

然后2 * 2 * 3 * 5 * 5 == 300,这样就检查出来了!

在您的else区块中似乎确实还有其他困难。当我尝试getfactors(366)时,它只会输出:

  

[2,3]

但这应该可以使您朝正确的方向前进:)