Python задача на числа

Как прописать корректное условие?

max = 1000
result = 0
for i in range(0,max):
    if (i % 2 == 0 or i % 3 == 0) and (not i % 4 == 0):
        result += i
print(result)

Ответы (2 шт):

Автор решения: Danis

кратных 2 и 3

поэтому нужен and а не or:

(i % 2 == 0 and i % 3 == 0)

Либо как сказал @AlexandrIvanov проверять кратность на 6:

i % 6 == 0

not i % 4 == 0

Место not лучше использовать !=:

i % 4 != 0

В итоге получаем:

if i % 6 and i % 4 != 0:

в одну строку:

print(sum([i for i in range(0, max) if i % 6 == 0 and i % 4 != 0]))

или так:

print(sum(filter(lambda x: x % 6 == 0 and x % 4 != 0, range(0, max)))) 
→ Ссылка
Автор решения: Щёбёнка Вокзальная

Если вы хотите, чтобы числа были кратны и 2, и 3 одновременно, например число 6, то вы должны вместо or написать and. Оператор or говорит программе, что числа должны быть либо кратны 2, например число 14, либо 3, например число 9. Короче говоря, код должен быть вот таким:

for i in range(0,max):
if (i % 2 == 0 and i % 3 == 0) and (not i % 4 == 0):
    result += i
→ Ссылка