Использование логических операторов

StackOverflow https://stackoverflow.com/questions/1428221

  •  07-07-2019
  •  | 
  •  

Вопрос

Это работает нормально

if ((a >= 40 && a <= 50) || (a >= 60 && a <= 80))
// do something

Как мне сделать обратное?

if ((a < 40 && a > 50) || (a < 60 && a > 80))
// do something

Код работает не так, как ожидалось.Я хочу что-то вроде если нет (условие)

Это было полезно?

Решение

Возможно, вы захотите взглянуть на законы де Моргана .

1. !((a >= 40 && a <= 50) || (a >= 60 && a <= 80))

2. (!(a >= 40 && a <= 50) && !(a >= 60 && a <= 80))

3. ((!(a >= 40) || !(a <= 50)) && (!(a >= 60) || !(a <= 80))

4. ((a < 40 || a > 50) && (a < 60 || a > 80))


or in other words: (a < 40 || (50 < a && a < 60) || 80 < a)

Другие советы

if ((a < 40 || a > 50) && (a < 60 || a > 80))
// do something

Хотя я бы порекомендовал выяснить, как заставить его работать должным образом (переписав его)

if (!((a >= 40 && a <= 50) || (a >= 60 && a <= 80)))

должен работать, я верю.

Вам нужен "ИЛИ"

if ((a < 40 || a > 50) && (a < 60 || a > 80))

Или НЕ

if (!((a >= 40 && a <= 50) || (a >= 60 && a <= 80)))

Ваш второй пример

if ((a < 40 && a > 50) || (a < 60 && a > 80))

не имеет смысла, поскольку a не может быть одновременно меньше 40 и больше 50 (или меньше 60 и больше 80).

Что -то вроде

if (!((a < 40 && a > 50) || (a < 60 && a > 80)))

или

if ((a < 40 || a > 50) && (a < 60 || a > 80))
if (!((a >= 40 && a <= 50) || (a >= 60 && a <= 80)))

Предполагая, что вы хотите эквивалент

if ( not ((a >= 40 && a <= 50) || (a >= 60 && a <= 80)) )

тогда, если вы думаете об исходном выражении, оно должно быть

if (a < 40 || (a > 50 && a < 60) || a > 80)

Первое выражение позволяет a быть числом от 40 до 50 или от 60 до 80. Пропустите это на английском, и вам нужно число меньше 40 или от 50 до 60 или больше 80.

Законы де Моргана могут дать вам точный ответ, но я предпочитаю код, который вы можете прочитать вслух и понять.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top