为项目euler 1提供范围函数和/或语句python的建议

时间:2013-10-02 02:30:27

标签: python python-3.x

我只是想把所有3和5的倍数加起来到1000,同时确保我不会将重合倍数加两次因此或者。我只希望它添加5的倍数,如果它不是3的倍数。我知道我可以删除重叠的倍数但我想知道如何使用if语句只添加5的倍数如果它除以剩余0时除以3.谢谢提前

a=range(0, 1000,3 ) or range(0,1000,5)
b=sum(a)
print (b)

4 个答案:

答案 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。)