首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的get_factors函数给我一个"TypeError:'NoneType‘对象不可迭代“?

为什么我的get_factors函数给我一个"TypeError:'NoneType‘对象不可迭代“?
EN

Stack Overflow用户
提问于 2019-03-30 01:28:16
回答 1查看 141关注 0票数 0

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

我知道,错误发生在“因子中的因素”线接近尾端。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-30 01:39:39

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

由此产生的代码:

代码语言:javascript
复制
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

但这应该会让你朝着正确的方向前进:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55427328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档