Можете ли вы объяснить использование оператора по модулю в операторе if? - PullRequest
0 голосов
/ 28 марта 2020
m = 1
my_list_1 = [2 , 4, 1]
for x in my_list_1:
    for y in range(1,3):
        if (x + y) % 3:
            m = m * x
print (m)

В строке 5, что делает оператор по модулю. Разве не нужно что-то вроде == 1?

1 Ответ

1 голос
/ 28 марта 2020

Не нужно ли что-то вроде == 1?

Нет, это не так.

См. https://docs.python.org/3/reference/expressions.html#booleans - if работает с результатом любое выражение ; он не должен быть строгим True и False, и при этом не должен быть задействован какой-либо оператор сравнения.

В контексте логических операций , а также когда выражения используются операторами потока управления [например, если], следующие значения интерпретируются как ложные: False, None, цифра c ноль (0) всех типов, а также пустые строки и контейнеры (включая строки, кортежи, списки, словари, наборы и frozensets). Все остальные значения интерпретируются как истина.

Соответствующие случаи: % возвращает ноль или ненулевое значение.

Ноль считается выражением false-y, а ненулевое является выражением true-y.

if 0:
  print("Not here!")

if 1:
  print("Here!")

Таким образом, код эквивалентен использованию явного сравнения:

if ((x + y) % 3) != 0:    # eg. if the remainder is 1 or 2 (but not 0),
    m = m * x             #     as non-zero numeric is truth-y
...