Найти - Пользователи
Полная версия: Поясните по логическим операторам
Начало » Python для новичков » Поясните по логическим операторам
1 2 3
lorien
lorien, а что насчет этого (оператор or):
1.
>>> x=None
>>> y=0
>>> x or y
0
Почему он вывел 0 вместо None?

Читай ещё раз, что я написал выше про работу or.

И вот еще:
2.
>>> x=пустые квадратные скобки (пишу текстом, так как здесь не отображается)
>>> y=None
>>> x or y
>>>
Он не вывел ничего. Здесь нет бага/глюка? Исходя из вышесказанного, должен был вывести пустые квадратные скобки. Или они просто не отобразились?
Читай ещё раз, что я написал выше про работу or. Он вывел второй аргумент, просто в коносоли None выводится как пустая строка, если хочешь явно увидеть None напиши так:
>>> print x or y

3.
>>> x=None
>>> y=пустые квадратные скобки
>>> x or y
пустые квадратные скобки
Он их вывел в конце. Но почему не None?
Читай ещё раз, что я написал выше про работу or.

4.
>>> x=пустые квадратные скобки
>>> y=пустые квадратные скобки
>>> x or y
пустые квадратные скобки

Выводит пустые квадратные скобки. А во 2 примере не выводит! Почему в случае выше он не вывел ничего, и даже ошибки не выдал?
Читай ещё раз, что я написал выше про работу or, а также ответ к пункту 2.
Kentavr
>>> x=
>>> y=None
>>> print(x or y)
None

Точняк, None!
Здесь понятно. 1, 3 и 4 примеры понятны.

Понятно и по другим примерам!
Если 0, None, квадратные скобки или пустой список - он выводит 2 аргумент автоматически, так как первый “пуст”. И если вторым аргументом при этом стоит None, то выводится пустая строка (в консоли, на самом деле выводится None).


1) если она не равна:
- нулю,
- None,
- пустой строке,
- пустому списку,
, то он возвращает её.
2) иначе он возвращает вторую переменную при любом ее виде.

Сухая логика.
lorien
> так как первый “пуст”.

Да, если говорить более формально, то пустота означает, что если мы переменную передадим в конструктор булевого типа (bool), то мы получим на выходе False:

>>> bool(0)
False
>>> bool(None)
False
>>> bool('')
False
>>> bool({})
False

т.е. оператор or можно записать ещё так:
def operator_or(a, b):
if a:
return a
else:
return b

Только следует заметить, что поведение этой функции будет отличаться от реального поведения оператора or т.к. оператор or не вычисляет правый аргумент, если для левого верно bool(аргумент) == True. В случае же функции, чтобы вызвать её, ей нужно передать оба аргумента и ини будут вычислены в момент вызова функции.
Kentavr
По оператору and:

>>> x=5
>>> y=2
>>> x and y
2
>>> x=5
>>> y=0
>>> x and y
0
>>> x=0
>>> y=2
>>> x and y
0
>>> x= (квадратные скобки - чтобы отличить от другого нуля)
>>> y=0
>>> x and y
квадратные скобки

Первое значение (не 0), смотрит второе. Второе (не 0) => возврат 2 переменной (не 0)
Первое значение (не 0), смотрит второе. Второе (0) => возврат 2 переменной (0)
Первое значение (не 0), (он смотрит второе?). Второе (не 0) => возврат 1 переменной (0)
Первое значение (не 0), (он смотрит второе?). Второе (0) => возврат 1 переменной (0)

Он смотрит 2 значение? Смысл ему смотреть 2 значение, если все равно при “нуле” 1 значения он вернет 1 переменную?


lorien
Вы можете сами проверить, смотрит или нет он второе значение, сделайте функцию
def some_func():
print ":-)"
return 2

и потом в консоли посмотрите, что будет если вы вызовете: 0 and some_func()
Kentavr
Приведите пример с функцией - до этого раздела я еще не дошел.
lorien
Ну так дойдите до этого раздела, я лично никуда не тороплюсь.
Kentavr
1.
А с оператором not что?
Вот что получается:
>>> x=5
>>> y=2
>>> x not y
SyntaxError: invalid syntax
>>>
Понимаю, что синтаксическая ошибка, но как правильно записать выражение?

Вот еще:
>>> x=5
>>> y=2
>>> not y
False
>>> not x
False
>>>

2.
Кстати, что значит вычисление по короткой схеме?
“Операторы and и or вычисляются по короткой схеме и возвращают операнд, определяющий результат”.
Kentavr
>>> z=0
>>> not z
True
>>> z=5
>>> not z
False

Получается, он рассматривает в Булевом контексте. 0- правда, значение - ложь.
Kentavr
>>> x=0
>>> y=0
>>> not x
True
>>> not y
True
>>> not (x or y)
True
>>> z=2
>>> not z
False
>>> not (z or y)
False
>>> a=квадратные скобки
>>> not a
True
>>> b=None
>>> not b
True
>>> not None
True
>>> not квадратные скобки
True
>>> not 1
False
>>> not 0
True
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