添加3和5的倍数小于1000

时间:2017-03-16 15:11:55

标签: python

我试图找到3和5的倍数之和,而总和小于1000.当我运行代码时,我只得到一个永不停止的0列表,并且它说“要处理的输出太多” 。我不知道我哪里出错了,也不会反馈。

--
-- Dumping data for table yourTable 
--

编辑

循环每次都将i重置为0。这意味着它总是小于1000。

5 个答案:

答案 0 :(得分:2)

你有一个无限循环,因为i没有增加,result也增加了。

然后归结为你想要的东西:

总和小于1000

result = 0
i = 0 
while result <= 1000:
    i += 1
    if i % 3 == 0 or i % 5 == 0:
        result += i

print(result - i)
# 998

小于1000的元素

如果你引用了Euler problem,那么总和不应该小于1000,但要素是:

total_sum = 0
for i in range(1000):
    if (i % 3 == 0 or i % 5 == 0):
        total_sum = total_sum + i
print total_sum  
# 233168

另一种选择是:

sum(set(range(0,1000,3)) | set(range(0,1000,5)))
# 233168

或:

sum(range(0,1000,3)) + sum(range(0,1000,5)) - sum(range(0,1000,15))
# 233168

答案 1 :(得分:1)

一个有趣的练习是用更多的&#34; pythonic&#34;来重写它。方式,例如:

sum(filter(lambda x: x % 3 == 0 or x % 5 == 0, xrange(1000)))

甚至更好:

sum(x for x in xrange(1000) if x % 3 == 0 or x % 5 == 0)

两者都给出了233168

(请注意,在这两种情况下sum()都是Python内置函数。)

顺便说一句,在您的问题陈述中,您提到&#34;少于1000&#34;,但您的代码在循环中包含1000.

答案 2 :(得分:0)

你永远不会增加我。将i = 0置于循环之外,并且i + = 1。即。

result = 0
i = 0

while result <= 1000:
    if i % 3 == 0 or i % 5 == 0:
        print(i)
        result += i
    i += 1

答案 3 :(得分:0)

def sum(): 
    result = 0
    i = 0
    # Put i=0 before loop begin
    while result <= 1000:
        if i % 3 == 0 or i % 5 == 0:
            print i
            result += i
            i+=1  # Put i+=1 after result here
        else:
            i += 1
    print ("sum= "+str(result))
sum()

在循环开始之前放i = 0,在结果

之后放i + = 1

答案 4 :(得分:0)

如果有人想知道,这是一个经典问题,我从Euler项目中了解到: https://projecteuler.net/problem=1

除了这里给出的所有答案外,还有一个使用算术级数(https://en.wikipedia.org/wiki/Arithmetic_progression)的O(1)答案。

基本上我们需要将3的AP计算到小于1000的最大除数3将5的AP加到5的最大除数小于1000减去AP的15到最大除数15小于1000(此步骤删除了因为它们是3和15的倍数而添加两次的itens)。

以下是代码:

def ap(i, range_start, range_end):
    a1 = range_start
    an = range_end
    n = (an - a1)/i + 1

    return (a1 + an) * n / 2

def ap_with_limit(i, limit):
    limit -= 1
    return ap(i, i, limit - (limit%i))

print ap_with_limit(3, 1000) + ap_with_limit(5, 1000) - ap_with_limit(15, 1000)
# 233168