我需要帮助计算在给定范围内可被3或5整除的数字之和。到目前为止,我已经到了这个地步;
print filter(reduce(map(lambda x, y: x % 3 == 0 or y % 5 == 0, x + y, range(30))))
会抛出此错误
Traceback (most recent call last):
File "<pyshell#65>", line 1, in <module>
print filter(reduce(map(lambda x, y: x % 3 == 0 or y % 5 == 0, x + y, range(30))))
NameError: name 'x' is not defined
我认为我没有找到解决方案,甚至没有找到正确的方向,所以如果有人能指出我会走向伟大的方向,欢呼。
答案 0 :(得分:1)
使用a
定义b
和b > a
后:
reduce(lambda x, y: x + y, filter(lambda x: x % 3 == 0 or x % 5 == 0, range(a, b)))
在你的情况下:
reduce(lambda x, y: x + y, filter(lambda x: x % 3 == 0 or x % 5 == 0, range(30)))
或没有reduce
和filter
:
sum(x for x in range(30) if x % 3 == 0 or x % 5 == 0)
如果值范围很大(不是30
),则可以在python 2上使用xrange
,以便它返回生成器而不是列表。
如果您真的想要包含map
功能,可以使用身份功能,如下所示:
reduce(lambda x, y: x + y, filter(lambda x: x % 3 == 0 or x % 5 == 0,
map(lambda x: x, range(30))))
答案 1 :(得分:0)
试试这个:
sum([i for i in range(1,100) if i%3==0 and i%5==0])
如果您需要一些解释,请随意询问:)
答案 2 :(得分:0)
reduce(lambda x, y: x + y, filter(lambda x : x % 3 == 0 or x%5 == 0, range(11)), 0)