Почему оператор AND, OR дает односторонний вывод для типов данных, таких как Boolean, и наборов в python? - PullRequest
0 голосов
/ 09 июня 2018
# FOR SETS
a=set([1,2,3])
b=set([4,5,6])

print(a and b) #always prints right side value that is b here
print(a or b) #always prints left side value that is a here
print(b and a)#prints a as its on right
print(b or a)#prints b as its on left


#FOR BOOLEANS
print(False and 0) #prints False as it is on the left
print(0 and False) #prints 0 , same operator is used than why diff output
print(False or '') #prints '' as it is on the right
print('' or False) #prints False as now it is on the right

print(1 or True) #prints 1
print(True or 1) #prints True
print(True and 1)#prints 1
print(1 and True)#prints True

И всегда печатает левое значение, а ИЛИ всегда печатает правое значение для Ложный тип логическое значение.Обратное происходит с True type boolean.

При применении к любое количество устанавливает ИЛИ дает крайнее левое значение, а И дает крайнее правое значение.Зачем ?

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Я не думаю, что это связано с левой или правой стороной, но больше о том, как и / или оцениваются.

Прежде всего, в python 0 равно False, а 1 - True, но этоВозможно, что True и False будут переназначены, но по умолчанию 0 == 0 или 0 == False оба - True.

При этом вы можете посмотреть, как и / или оценивается условие оператора.

To summerise: операторы и всегда ищут значение False (0), если он находит его по первому оцениваемому параметру, он останавливается, но если он находит True или 1, ему нужно было оценитьвторое условие, чтобы увидеть, если это не так.Потому что False и , что-то еще всегда будет ложным.Эта таблица может помочь вам, посмотрите, когда у меня 0 (Ложь), ответ всегда 0 (Ложь)

*and* truth table
0 0 = 0                  
0 1 = 0                  
1 0 = 0                  
1 1 = 1   

или немного отличается, но с той же механикой: или будет искать первый True (1), который он найдет.Поэтому, если он сначала находит False, он оценивает второй параметр, если он сначала находит True (1), то он останавливается.Здесь, когда у вас 1 (True) ответ всегда равен 1 (True)

*or* truth table
0 0 = 0
0 1 = 1
1 0 = 1
1 1 = 1

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

Для вашего примера:

#FOR BOOLEANS
print(False and 0) #prints False because *and* only need one False
print(0 and False) #prints 0 , because 0 = False and *and* only need one False
print(False or '') #prints '' because *or* is looking for a 1(True) but here both are False so he print the last one
print('' or False) #prints False (same reason as the one above) and he print the last one.

print(1 or True) #prints 1 because it's *or* and he found a True(1)
print(True or 1) #prints True same reason as above 1 = True so...
print(True and 1) #prints 1 because *and* is looking for a False and the first condition is True so he need to check the second one
print(1 and True) #prints True same as above 1 = True so and check for second paramater.
0 голосов
/ 09 июня 2018

Ссылка на Python отвечает на ваш вопрос.https://docs.python.org/2/reference/expressions.html#boolean-operations

Выражение x and y сначала оценивает x;если x равно false, возвращается его значение;в противном случае y вычисляется и возвращается полученное значение.

Выражение x or y сначала оценивает x;если x истинно, возвращается его значение;в противном случае y вычисляется и возвращается полученное значение.

Значения типа контейнера (такие как наборы и списки) считаются ложными, если они пусты, и истинными в противном случае.

...