Найти - Пользователи
Полная версия: Поясните по логическим операторам
Начало » Python для новичков » Поясните по логическим операторам
1 2 3
Kentavr
Логические операторы
Язык 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? Читал Википедию - не понял. И не понимаю, почему именно такие значения в программах получаются… В чем их смысл?
Kentavr
АБРАКАДАБРА какая-то! Объясните по-простому!
4kpt
Э…
Все логично. В чем прблема то?
Tisov
>>> five or two
5
если истинны первая или вторая переменные. Так как первая переменная - истина, творая уже не проверяется(логическое ИЛИ), и выводится первая, т.к. на ней проверка остановилась.

five and two
2
если истинны первая и вторая переменные. Проверяется уже обе переменных(логическое И), а выводится последняя, т.к. на ней проверка остановилась.

>>> True or False
True
>>> True and False
False
Kentavr
“Так как первая переменная - истина” - Почему?
Просьба, Tisov, объяснить поподробнее.

Желательно (если не трудно тебе, реально не понял до конца), с примерами.
Kentavr
>>> 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???
Tisov
from wiki:
Логический, булев (англ. Boolean или logical data type) тип данных — примитивный тип данных в информатике, которые могут принимать два возможных значения, иногда называемых правдой (true) и ложью (false)
т.е. или истина или ложь

В языке Python булев тип данных обозначается как bool, для приведения других типов данных к булеву существует функция bool(), работающая по следующим соглашениям:
  • строки: пустая строка — ложь, непустая строка истина.
  • числа: нулевое число — ложь, ненулевое число (в том числе и меньшее единицы) — истина.
  • списки и кортежи: пустой список (кортеж) — ложь, непустой (даже содержащий один элемент, например пустой кортеж) — истина.
  • функции — всегда истина.

Сдается мне, вам немного матчасть почитать надо.
lorien
Как работает оператор or. Он выбирает какую переменную вернуть из тех двух, что ему передали (которые записаны слева и справа от него). Он смотрит первую переменную:
1) если она не равана нулю, None или пустой строке или пустому списку (и т.д.), то он возвращает её
2) иначе он возвращает вторую переменную

Как работает оператор and. Он выбирает какую переменную вернуть из тех двух, что ему передали (которые записаны слева и справа от него). Он смотрит первую переменную:
1) если она не равна нулю, None или пустой строке, то он смотрит вторую переменную:
1-А) если вторая переменная не равна нулю, None или пустой строке, то он возвращает вторую переменную:
1-Б) инае возвращает первую переменную
2) иначе возвращает первую переменную

В случае and нужно также знать, что если первая переменная равна нулевому значению, то значение второй переменной вообще не вычисляется, например, если там указан вызов функции, то он не будет выполнен
Kentavr
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
Tisov
Kentavr
1.
>>> x=None
>>> y=0
>>> x or y
0
Почему он вывел 0 вместо None?
так как None - False, то проверка доходит до следующего, где и выполняется условие, выводится 0
2.
>>> x=пустые квадратные скобки (пишу текстом, так как здесь не отображается)
>>> y=None
>>> x or y
>>>
Он не вывел ничего. Здесь нет бага/глюка? Исходя из вышесказанного, должен был вывести пустые квадратные скобки. Или они просто не отобразились?
так как скобки(пустой список) тоже False - условие срабатывает на y, но y = None, выводить нечего. Если заменить y='None', то это видно.

далее тоже что и в предыдущих случаях, выводит y
т.е. везде выводит последнее значение на котором остановилось условие
>>> x=['x']
>>> y=[]
>>> x or y
['x']
или
>>> x=[]
>>> y=['y']
>>> x or y
['y']
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB