Форум сайта python.su
0
Логические операторы
Язык Python предоставляет три логических оператора: and, or и not.
Операторы and и or вычисляются по короткой схеме и возвращают опе
ранд, определяющий результат, – они не возвращают значение типа
Boolean (если операнды не являются значениями типа Boolean). Взгля
ните, что это означает на практике:
>>> five = 5
>>> two = 2
>>> zero = 0
>>> five and two
2
>>> two and five
5
>>> five and zero
0
(Вообще не понимаю, почему!)
Если выражение участвует в логическом контексте, результат оцени
вается как значение типа Boolean, поэтому предыдущие выражения
могли бы рассматриваться, как имеющие значения True, True и False,
например, в контексте инструкции if.
>>> nought = 0
>>> five or two
5
>>> two or five
2
>>> zero or five
5
>>> zero or nought
0
(аналогично!)
Оператор or напоминает оператор and – здесь в булевом контексте были
бы получены значения True, True, True и False.
Унарный оператор not оценивает свой операнд в булевом контексте
и всегда возвращает значение типа Boolean, поэтому, продолжая пре
дыдущий пример, выражение not (zero or nought) вернет значение
True, а выражение not two – False.
Что такое Boolean? Читал Википедию - не понял. И не понимаю, почему именно такие значения в программах получаются… В чем их смысл?
Офлайн
0
АБРАКАДАБРА какая-то! Объясните по-простому!
Офлайн
63
Э…
Все логично. В чем прблема то?
Офлайн
0
>>> five or twoесли истинны первая или вторая переменные. Так как первая переменная - истина, творая уже не проверяется(логическое ИЛИ), и выводится первая, т.к. на ней проверка остановилась.
5
five and twoесли истинны первая и вторая переменные. Проверяется уже обе переменных(логическое И), а выводится последняя, т.к. на ней проверка остановилась.
2
>>> True or False True >>> True and False False
Отредактировано Tisov (Сен. 12, 2013 07:36:37)
Офлайн
0
“Так как первая переменная - истина” - Почему?
Просьба, Tisov, объяснить поподробнее.
Желательно (если не трудно тебе, реально не понял до конца), с примерами.
Отредактировано Kentavr (Сен. 12, 2013 08:10:50)
Офлайн
0
>>> x=5
>>> y=2
>>> z=0
>>> x and y
2
>>> y and x
5
>>> z and x
0
>>> x and z
0
>>> z and y
0
>>> y and z
0
Я так понял, что у and выводится последнее значение, если это не ноль (тогда выводится 0).
Но почему and выводит последнее значение???
И почему при нуле выводит 0???
Отредактировано Kentavr (Сен. 12, 2013 08:38:16)
Офлайн
0
from wiki:
Логический, булев (англ. Boolean или logical data type) тип данных — примитивный тип данных в информатике, которые могут принимать два возможных значения, иногда называемых правдой (true) и ложью (false)
т.е. или истина или ложь
…
В языке Python булев тип данных обозначается как bool, для приведения других типов данных к булеву существует функция bool(), работающая по следующим соглашениям:
- строки: пустая строка — ложь, непустая строка истина.
- числа: нулевое число — ложь, ненулевое число (в том числе и меньшее единицы) — истина.
- списки и кортежи: пустой список (кортеж) — ложь, непустой (даже содержащий один элемент, например пустой кортеж) — истина.
- функции — всегда истина.
Отредактировано Tisov (Сен. 12, 2013 09:12:45)
Офлайн
Как работает оператор or. Он выбирает какую переменную вернуть из тех двух, что ему передали (которые записаны слева и справа от него). Он смотрит первую переменную:
1) если она не равана нулю, None или пустой строке или пустому списку (и т.д.), то он возвращает её
2) иначе он возвращает вторую переменную
Как работает оператор and. Он выбирает какую переменную вернуть из тех двух, что ему передали (которые записаны слева и справа от него). Он смотрит первую переменную:
1) если она не равна нулю, None или пустой строке, то он смотрит вторую переменную:
1-А) если вторая переменная не равна нулю, None или пустой строке, то он возвращает вторую переменную:
1-Б) инае возвращает первую переменную
2) иначе возвращает первую переменную
В случае and нужно также знать, что если первая переменная равна нулевому значению, то значение второй переменной вообще не вычисляется, например, если там указан вызов функции, то он не будет выполнен
Офлайн
0
Tisov, по поводу матчасти ты прав. Не приходилось с этим сталкиваться.
Спасибо за пояснения по Булеану.
lorien, а что насчет этого (оператор or):
1.
>>> x=None
>>> y=0
>>> x or y
0
Почему он вывел 0 вместо None?
И вот еще:
2.
>>> x=пустые квадратные скобки (пишу текстом, так как здесь не отображается)
>>> y=None
>>> x or y
>>>
Он не вывел ничего. Здесь нет бага/глюка? Исходя из вышесказанного, должен был вывести пустые квадратные скобки. Или они просто не отобразились?
Вот еще пример:
3.
>>> x=None
>>> y=пустые квадратные скобки
>>> x or y
пустые квадратные скобки
Он их вывел в конце. Но почему не None?
Если брать:
4.
>>> x=пустые квадратные скобки
>>> y=пустые квадратные скобки
>>> x or y
пустые квадратные скобки
Выводит пустые квадратные скобки. А во 2 примере не выводит! Почему в случае выше он не вывел ничего, и даже ошибки не выдал?
Просьба пояснить все примеры.
Tisov, если знаешь, тоже напиши.
P.S.: Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) on win32
Отредактировано Kentavr (Сен. 12, 2013 12:09:07)
Офлайн
0
Kentavrтак как None - False, то проверка доходит до следующего, где и выполняется условие, выводится 0
1.
>>> x=None
>>> y=0
>>> x or y
0
Почему он вывел 0 вместо None?
2.так как скобки(пустой список) тоже False - условие срабатывает на y, но y = None, выводить нечего. Если заменить y='None', то это видно.
>>> x=пустые квадратные скобки (пишу текстом, так как здесь не отображается)
>>> y=None
>>> x or y
>>>
Он не вывел ничего. Здесь нет бага/глюка? Исходя из вышесказанного, должен был вывести пустые квадратные скобки. Или они просто не отобразились?
>>> x=['x'] >>> y=[] >>> x or y ['x']
>>> x=[] >>> y=['y'] >>> x or y ['y']
Отредактировано Tisov (Сен. 12, 2013 13:21:01)
Офлайн