Python 类型错误:';非类型';对象不可迭代:3和5的倍数

Python 类型错误:';非类型';对象不可迭代:3和5的倍数,python,Python,我是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:‘None

我是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”。我已经研究了关于堆栈溢出的其他问题,但我仍然不知道我能做什么。任何帮助都将不胜感激

您的函数mult\u of_3\u或_5不返回任何内容。Python将返回NoneType作为默认值,即使没有显式指定

您尝试使用sum(mult_of_3_或_5())对结果求和,它将尝试求和(NoneType)。这是不可能的,因为NoneType不可编辑

print(sum(mult_of_3_or_5()))
sum()

但是
mult\u of_3\u或_5()
函数不返回任何内容,因此默认情况下它返回
None
sum()
正在尝试迭代值
None
,这是您的错误


看起来您打算
mult\u of_3\u或_5()
返回一个0到20之间的值列表,这些值是3或5的倍数。但它不会那样做。

我想你的意思是:

def mult_of_3_或_5():
对于范围(21)内的x:
如果x%5==0:
产量x
如果x%3==0:#如果3和5都是除数,我怀疑你是想数两次,如果不是,则改为elif
产量x
打印(总和(3或5()之和)
基本上是3和5的所有倍数之和,如果是两者的倍数(如15),则数两次

返回
113

您应该熟悉python中的generator的概念,这就是我在这里通过关键字
yield
介绍的。 与
return
不同的是,一旦调用,它就不会终止函数-这基本上就是我理解的您想要实现的

要阅读有关发电机的信息,请执行以下操作:


mult\u of_3\u或_5
没有返回任何内容,因此它显式返回
None
应该怎么做
(x)
您可能需要重新阅读有关
def
使用的学习材料。您建议如何找到这些数字的总和?如果你不知道这是第一个问题。