Ложные условия: различия между версиями
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, то он бы срабатывал, даже если бы в одной из точек цвет совпал с заданным (что нам не подходит).