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