Ложные условия

Материал из UoPilot
Версия от 21:52, 27 августа 2019; Tatikoma (обсуждение | вклад) (Новая страница: «'''Вопрос:''' <br>Задаю условие: if_not (x1 y1 color1) and (x2 y2 color2) // условие такого вида не хочет раб...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Вопрос: <br>Задаю условие:

if_not (x1 y1 color1) and (x2 y2 color2)     // условие такого вида не хочет работать правильно
    bla bla bla
end_if

Однако, если реализовать следующим образом:

if_not (x1 y1 color1)
    if_not (x2 y2 color2)
        bla bla bla
    end_if
end_if      // то все прекрасно выполняется


Ответ: <br>Обобщим ситуацию: нужно, чтобы скрипт проверил цвет в нескольких точках, и если ВО ВСЕХ этих точках цвет НЕ СОВПАДАЕТ с заданным, то выполнить какие-то действия. <br>Действительно, с условием if_not у людей часто возникают некоторые недоразумения. <br>Решение простое, хоть и не совсем понятное сразу. <br>Нужно делать так:

if_not (x1 y1 color1) OR (x2 y2 color2)
    что-то делаем
end_if

Почему OR ? Всё довольно просто. <br>Условие if_not срабатывает только в случае

if_not ЛОЖЬ

(в отличие от оператора if ИСТИНА)

<br>Мы имеем следующие логические выражения: <br>ЛОЖЬ or ЛОЖЬ = ЛОЖЬ <br>ЛОЖЬ or ИСТИНА = ИСТИНА <br>ИСТИНА or ЛОЖЬ = ИСТИНА <br>ИСТИНА or ИСТИНА = ИСТИНА

<br>ЛОЖЬ and ЛОЖЬ = ЛОЖЬ <br>ЛОЖЬ and ИСТИНА = ЛОЖЬ <br>ИСТИНА and ЛОЖЬ = ЛОЖЬ <br>ИСТИНА and ИСТИНА = ИСТИНА

<br>Для нашего же случая условие должно срабатывать (должно быть равно ЛОЖЬ), только если все условия проверок ложны (т.е. во всех точках цвет не совпадает с заданным). А для этого подходит именно логический оператор OR, как и видно выше. Если бы мы использовали оператор AND, то он бы срабатывал, даже если бы в одной из точек цвет совпал с заданным (что нам не подходит).