2016-05-26 6 views
-1

Если я правильно понимаю, 5% 5 должно быть равно 0. Однако, когда я запускаю этот код:Я неправильно использую оператор modulo?

endless = 0 
while endless == 0: 
    n = int(input("Provide a number here: ")) 
    count = 0 
    sum = 0 
    while count < n: 
     if 1+count % 3 == 0 | 1+count % 5 == 0: 
      sum += 1 + count 
     count += 1 
     if count >= n: 
      print(sum) 

Он всегда возвращает 0, откуда следует, что 1 + подсчитывать% 3 или 1 + подсчитывать% 5 никогда не приравнивает 0. Что я пропустил?

EDIT: Я, кажется, так или иначе пропустил фундаментальную математику.

ответ

3

Не используйте побитовое ИЛИ, и используйте paranthesis (operator precedence)!

Попытка:

(1+count) % 3 == 0 or (1+count) % 5 == 0: 
^  ^  ^^^ ^
1

Приоритет оператор % такой же, как / и выше, чем +, это означает, что:

1+count % 3 == 1 + (count % 3) 

, который никогда не может быть 0, так как по модулю возвращает значение в диапазоне от 0 и 2.