我是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上的其他问题,也有类似的问题,但我还是不明白我能做什么。任何帮助都将被感激。
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的倍数的值列表。 但它并没有这样做。
你的函数 mult_of_3_or_5 什么也不返回。Python 将返回 NoneType 作为默认值,即使没有明确指定。
你尝试用 sum(mult_of_3_or_5()) 对结果进行求和,结果会尝试 sum(NoneType) 。这是不可能的,因为 NoneType 是不可迭代的。
我想你的意思是。
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
它不会终止函数,一旦被调用--这基本上就是 我明白了 您想要实现的目标。
要阅读关于 发电机: