Последовательное применение or и and

Рейтинг: -1Ответов: 1Опубликовано: 21.07.2023

Почему отличается код вида

if (a or b or c and d and e and f)

от

if ((a or b or c) and (d and e and f))

Хотел правильно склонить количество предметов, но пока не поставил скобки в частях с or и and числа 12, 13, 14 почему-то "пролазили" через это условие (нужно чтобы числа заканчивались на 2,3,4, но не 12, 13, 14.

if ((num1 % 10 == 2 or num1 % 10 == 3 or num1 % 10 == 4) and ((num1 % 100 != 12) and (num1 % 100 != 13) and (num1 % 100 != 14)))

Ответы

▲ 4Принят

Здесь два вопроса.

Первый — почему. Ответ: из-за приоритета операций. Принцип тот же, что и у отличия a+b+c*d*e*f от (a+b+c)*(d*e*f). Приоритет and выше, чем приоритет or.

Второй — как. Тут я бы не стал делать такую страшную логику, ограничившись этим:

if (abs(num%10-3)<=1 && num%100/10!=1)

Ну, или, если вам так привычнее :),

if (abs(num%10-3)<=1 and num%100/10!=1)