类型错误:'NoneType'对象不可迭代:3和5的倍数。

问题描述 投票:-2回答:1

我是python的新手,所以如果这个问题有一个非常明显的答案,对不起。这是我的代码。

def mult_of_3_or_5():
    for x in range(21):
        if x % 5 == 0:
            (x)
            continue
        elif x % 3 == 0:
            (x)


print(sum(mult_of_3_or_5())) 

当我运行时,出现了 "TypeError: 'NoneType' object is not iterable "的错误。我看了Stack Overflow上的其他问题,也有类似的问题,但我还是不明白我能做什么。任何帮助都将被感激。

python
1个回答
0
投票
print(sum(mult_of_3_or_5()))

sum() 期望接收一个项目序列(通常是一个列表)作为它的参数。

但是 mult_of_3_or_5() 函数不返回任何内容,因此它返回 None 默认情况下。 sum() 正在试图遍历 None这就是你的错误

看来你是想 mult_of_3_or_5() 来返回一个0到20之间的3或5的倍数的值列表。 但它并没有这样做。


0
投票

你的函数 mult_of_3_or_5 什么也不返回。Python 将返回 NoneType 作为默认值,即使没有明确指定。

你尝试用 sum(mult_of_3_or_5()) 对结果进行求和,结果会尝试 sum(NoneType) 。这是不可能的,因为 NoneType 是不可迭代的。


0
投票

我想你的意思是。

def mult_of_3_or_5():
    for x in range(21):
        if x % 5 == 0:
            yield x
        if x % 3 == 0: # I suspect you meant to count twice if both 3 and 5 are divisors, if not make it elif instead
            yield x


print(sum(mult_of_3_or_5())) 

本质上是将所有3和5的倍数相加,如果是两者的倍数(例如:15),则计算两次。

返回 113

你应该熟悉以下概念 发电机 在python中--这就是我用关键字介绍的 yield 这里不像 return 它不会终止函数,一旦被调用--这基本上就是 我明白了 您想要实现的目标。

要阅读关于 发电机:

https:/wiki.python.orgmoinGenerators。

© www.soinside.com 2019 - 2024. All rights reserved.