我只是想将 3 和 5 的所有倍数相加到 1000,同时确保我不会将重合倍数相加两次,因此是或。如果它不是 3 的倍数,我只希望它添加 5 的倍数。我知道我可以删除重叠的倍数,但我想知道如何使用 if 语句仅添加 5 的倍数(如果确实如此)除以 3 时不给出余数 0。提前致谢
a=range(0, 1000,3 ) or range(0,1000,5)
b=sum(a)
print (b)
我只是想将 3 和 5 的所有倍数相加到 1000,同时确保我不会将重合倍数相加两次,因此是或。如果它不是 3 的倍数,我只希望它添加 5 的倍数。我知道我可以删除重叠的倍数,但我想知道如何使用 if 语句仅添加 5 的倍数(如果确实如此)除以 3 时不给出余数 0。提前致谢
a=range(0, 1000,3 ) or range(0,1000,5)
b=sum(a)
print (b)
您可以组合这两个列表并从联合中获取唯一值:
sum(set(range(0, 1000, 3) + range(0, 1000, 5)))
set
是唯一元素的无序列表。所以,这里有两个列表,一个是 3 的倍数,另一个是 5 的倍数;然后将此新列表转换为set
仅保留唯一元素。
您可以使用列表推导:
a = [x for x in range(1000) if ((x % 3 == 0) or (x % 5 == 0))]
b = sum(a)
您可以删除所有 15 的倍数。
与其他解决方案相比,这是一个非常暴力的解决方案,但它也非常简单。求所有 3 的倍数和 5 的所有倍数的总和。但是,您会将 15 的倍数相加两次,因此请从最终总和中删除它们:
total = sum(range(0, 1000,3)+range(0,1000,5))-sum(range(0,1000,15))
这是一种总共 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 中 -range
在 Python 3 中使用)。