Ложные условия: различия между версиями

Материал из UoPilot
Перейти к навигации Перейти к поиску
(Новая страница: «'''Вопрос:''' <br>Задаю условие: if_not (x1 y1 color1) and (x2 y2 color2) // условие такого вида не хочет раб...»)
 
 
Строка 1: Строка 1:
 
'''Вопрос:'''
 
'''Вопрос:'''
&lt;br>Задаю условие:
+
<br>Задаю условие:
 
  if_not (x1 y1 color1) and (x2 y2 color2)    // условие такого вида не хочет работать правильно
 
  if_not (x1 y1 color1) and (x2 y2 color2)    // условие такого вида не хочет работать правильно
 
     bla bla bla
 
     bla bla bla
Строка 14: Строка 14:
  
 
'''Ответ:'''
 
'''Ответ:'''
&lt;br>Обобщим ситуацию: нужно, чтобы скрипт проверил цвет в нескольких точках, и если ВО ВСЕХ этих точках цвет НЕ СОВПАДАЕТ с заданным, то выполнить какие-то действия.
+
<br>Обобщим ситуацию: нужно, чтобы скрипт проверил цвет в нескольких точках, и если ВО ВСЕХ этих точках цвет НЕ СОВПАДАЕТ с заданным, то выполнить какие-то действия.
&lt;br>Действительно, с условием if_not у людей часто возникают некоторые недоразумения.
+
<br>Действительно, с условием if_not у людей часто возникают некоторые недоразумения.
&lt;br>Решение простое, хоть и не совсем понятное сразу.
+
<br>Решение простое, хоть и не совсем понятное сразу.
&lt;br>Нужно делать так:
+
<br>Нужно делать так:
 
  if_not (x1 y1 color1) OR (x2 y2 color2)
 
  if_not (x1 y1 color1) OR (x2 y2 color2)
 
     что-то делаем
 
     что-то делаем
Строка 23: Строка 23:
  
 
Почему OR ? Всё довольно просто.
 
Почему OR ? Всё довольно просто.
&lt;br>Условие if_not срабатывает только в случае
+
<br>Условие if_not срабатывает только в случае
 
  if_not ЛОЖЬ
 
  if_not ЛОЖЬ
 
(в отличие от оператора if ИСТИНА)
 
(в отличие от оператора if ИСТИНА)
  
&lt;br>Мы имеем следующие логические выражения:
+
<br>Мы имеем следующие логические выражения:
&lt;br>ЛОЖЬ or ЛОЖЬ = ЛОЖЬ
+
<br>ЛОЖЬ or ЛОЖЬ = ЛОЖЬ
&lt;br>ЛОЖЬ or ИСТИНА = ИСТИНА
+
<br>ЛОЖЬ or ИСТИНА = ИСТИНА
&lt;br>ИСТИНА or ЛОЖЬ = ИСТИНА
+
<br>ИСТИНА or ЛОЖЬ = ИСТИНА
&lt;br>ИСТИНА or ИСТИНА = ИСТИНА
+
<br>ИСТИНА or ИСТИНА = ИСТИНА
  
&lt;br>ЛОЖЬ and ЛОЖЬ = ЛОЖЬ
+
<br>ЛОЖЬ and ЛОЖЬ = ЛОЖЬ
&lt;br>ЛОЖЬ and ИСТИНА = ЛОЖЬ
+
<br>ЛОЖЬ and ИСТИНА = ЛОЖЬ
&lt;br>ИСТИНА and ЛОЖЬ = ЛОЖЬ
+
<br>ИСТИНА and ЛОЖЬ = ЛОЖЬ
&lt;br>ИСТИНА and ИСТИНА = ИСТИНА
+
<br>ИСТИНА and ИСТИНА = ИСТИНА
  
&lt;br>Для нашего же случая условие должно срабатывать (должно быть равно ЛОЖЬ), только если все условия проверок ложны (т.е. во всех точках цвет не совпадает с заданным). А для этого подходит именно логический оператор OR, как и видно выше.
+
<br>Для нашего же случая условие должно срабатывать (должно быть равно ЛОЖЬ), только если все условия проверок ложны (т.е. во всех точках цвет не совпадает с заданным). А для этого подходит именно логический оператор OR, как и видно выше.
 
Если бы мы использовали оператор AND, то он бы срабатывал, даже если бы в одной из точек цвет совпал с заданным (что нам не подходит).
 
Если бы мы использовали оператор AND, то он бы срабатывал, даже если бы в одной из точек цвет совпал с заданным (что нам не подходит).

Текущая версия на 11:34, 28 августа 2019

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

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      // то все прекрасно выполняется


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

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

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

if_not ЛОЖЬ

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


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


ЛОЖЬ and ЛОЖЬ = ЛОЖЬ
ЛОЖЬ and ИСТИНА = ЛОЖЬ
ИСТИНА and ЛОЖЬ = ЛОЖЬ
ИСТИНА and ИСТИНА = ИСТИНА


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