В дополнение к фантастическому ответу Марцина обратите внимание, что вы также можете заранее вычислить, какие элементы использовать, и полностью избежать цикла while
. range
ваш друг здесь.
multiples_of_five = range(5, 1001, step=5)
multiples_of_three = range(3, 1001, 3)
Поскольку стоп range
равен эксклюзив , но мы хотим, чтобы все кратные от трех и пяти до 1000 включительно , мы должны вместо этого остановиться на 1001
. Это упрощает my_func
, которое Марчин изложил выше.
def list_multiples(n):
result = []
for i in range(n, 1001, n):
result.append(i)
return result
Хотя, если мы рассмотрим это более внимательно, вы увидите, что мы в основном просто приводим список и возвращаем. Давайте сделаем это напрямую.
def list_multiples(n):
return list(range(n, 1001, n))
Оттуда мы можем найти кратные пять и кратные три
fives = list_multiples(5)
threes = list_multiples(3)
Приведение к set
для удаления дубликатов (15 кратно 5 и 3, но не должно суммироваться дважды)
all_nums = set(fives + threes)
И суммируем результат
result = sum(all_nums)