2016-02-09 2 views
-2

Я пытаюсь найти сумму всех чисел меньше 1000, кратные 3 и 5. У меня это до сих пор:Проект Эйлера - Упражнение 1

for i in range(0, 1000): 
    if i % 3 == 0: 
     print i 
    elif i % 5 == 0: 
     print i 
b = sum(i) 
print b 

я получаю TypeError: 'int' object is not iterable (со ссылкой на b = sum(i))

+1

Это '3 и 5', или' 3 или 5'? Вы написали 3 и 5, которые просто «делятся на 15», но ваш код означает «3 или 5». – Lafexlos

+4

Хорошая старая проблема Эйлера проекта №1. Это гораздо выгоднее, если вы сами ими работаете. Кроме того, я бы не согласился на текущие ответы, если бы был вами, - есть более аккуратный способ с использованием арифметической прогрессии. – miradulo

+1

Попробуйте суммировать все числа менее 1000, в первую очередь. Правильно, тогда работайте над дополнительными ограничениями. – msw

ответ

-1

Вы могли бы попробовать что-то вроде этого:

# initially we declare a variable that will hold the current sum 
# and at the end of the for it will hold 
# the sum of the numbers you have mentioned. 
b = 0 
for i in range(1000): 
    # Then whether i is evenly divided by 3 or 5 
    # we add this number to the current sum 
    if i % 3 == 0 or i % 5 == 0: 
     b += i 

# last we print the sum 
print b 
-1

используйте следующую строку

sum принимает итерируемый объект в качестве входного. Список, наборы и т. Д. Являются итерабельными.

Так что попробуйте следующий

b = sum(i for i in range(1000) if i%3 == 0 or i%5 == 0) 
+1

Вам не нужны скобки, и это быстрее без – MaxNoe

+0

@MaxNoe спасибо .. –

+1

@MaxNoe это быстрее, потому что внутренне все равно он преобразуется в список: 'В [17] :% timeit sum (i для i в диапазоне (0,1000), если i% 3 == 0 или i% 5 == 0) 1000 циклов, лучше всего 3: 230 us за цикл'' В [18]:% timeit sum ([i для i в диапазоне (0,1000), если i% 3 == 0 или i% 5 == 0]) 1000 циклов, лучше всего 3: 228 us за цикл' –

-1

Из кода я полагаю, вам нужна сумма чисел, которые делятся на 3 or 5. Среди всех решений, другое возможное решение один-вкладыш:

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

Здесь вы получите это TypeError потому sum функция принимает последовательность чисел и возвращает сумму последовательности. В коде вы передаете i в качестве параметра sum, который в вашем случае является объектом типа int. Таким образом, вы получаете эту ошибку.