我只是想把所有3和5的倍数加起来到1000,同时确保我不会将重合倍数加两次因此或者。我只希望它添加5的倍数,如果它不是3的倍数。我知道我可以删除重叠的倍数但我想知道如何使用if语句只添加5的倍数如果它除以剩余0时除以3.谢谢提前
a=range(0, 1000,3 ) or range(0,1000,5)
b=sum(a)
print (b)
答案 0 :(得分:4)
您可以组合两个列表并从联合中获取唯一值:
sum(set(range(0, 1000, 3) + range(0, 1000, 5)))
set
是一个无序的唯一元素列表。所以,这里有两个列表,一个是3的倍数,另外5个是5的倍数。然后将此新列表转换为set
仅保留唯一元素。
答案 1 :(得分:3)
您可以使用列表理解:
a = [x for x in range(1000) if ((x % 3 == 0) or (x % 5 == 0))]
b = sum(a)
答案 2 :(得分:2)
您可以删除所有15的倍数。
与其他人相比,这是一个非常强力的解决方案,但也非常简单。 找到3的所有倍数和5的所有倍数的总和。但是你要添加15 两倍的倍数,所以从最终总和中删除它们:
total = sum(range(0, 1000,3)+range(0,1000,5))-sum(range(0,1000,15))
答案 3 :(得分:1)
这是一种方法,总共有5个加法,3个乘法,3个除法和琐碎的额外记忆; - )
def sumrange(start, stop, step):
x = xrange(start, stop, step)
if x:
return (x[0] + x[-1]) * len(x) // 2
else:
return 0
print sumrange(0, 1000, 3) + sumrange(0, 1000, 5) - sumrange(0, 1000, 15)
这取决于算术级数的总和等于级数中的元素数乘以平均值(第一个和最后一个元素之和的一半)。所有这一切都可以在不使用xrange
对象构建(甚至生成)列表的情况下完成(在Python 2中 - 在Python 3中使用range
。)