Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 12, 2013 13:59:35

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Поясните по логическим операторам

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.

Офлайн

#2 Сен. 12, 2013 14:49:40

Kentavr
Зарегистрирован: 2013-09-10
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Поясните по логическим операторам

>>> x=
>>> y=None
>>> print(x or y)
None

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

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


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

Сухая логика.

Отредактировано Kentavr (Сен. 12, 2013 14:51:32)

Офлайн

#3 Сен. 12, 2013 15:08:30

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Поясните по логическим операторам

> так как первый “пуст”.

Да, если говорить более формально, то пустота означает, что если мы переменную передадим в конструктор булевого типа (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. В случае же функции, чтобы вызвать её, ей нужно передать оба аргумента и ини будут вычислены в момент вызова функции.

Отредактировано lorien (Сен. 12, 2013 15:09:54)

Офлайн

#4 Сен. 12, 2013 15:11:40

Kentavr
Зарегистрирован: 2013-09-10
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Поясните по логическим операторам

По оператору 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 переменную?


Отредактировано Kentavr (Сен. 12, 2013 15:11:53)

Офлайн

#5 Сен. 12, 2013 15:15:09

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Поясните по логическим операторам

Вы можете сами проверить, смотрит или нет он второе значение, сделайте функцию

def some_func():
print ":-)"
return 2

и потом в консоли посмотрите, что будет если вы вызовете: 0 and some_func()

Отредактировано lorien (Сен. 12, 2013 15:15:22)

Офлайн

#6 Сен. 12, 2013 15:48:03

Kentavr
Зарегистрирован: 2013-09-10
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Поясните по логическим операторам

Приведите пример с функцией - до этого раздела я еще не дошел.

Отредактировано Kentavr (Сен. 12, 2013 15:48:34)

Офлайн

#7 Сен. 12, 2013 15:49:48

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Поясните по логическим операторам

Ну так дойдите до этого раздела, я лично никуда не тороплюсь.

Офлайн

#8 Сен. 12, 2013 15:51:47

Kentavr
Зарегистрирован: 2013-09-10
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Поясните по логическим операторам

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 (Сен. 12, 2013 16:07:10)

Офлайн

#9 Сен. 12, 2013 16:15:55

Kentavr
Зарегистрирован: 2013-09-10
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Поясните по логическим операторам

>>> z=0
>>> not z
True
>>> z=5
>>> not z
False

Получается, он рассматривает в Булевом контексте. 0- правда, значение - ложь.

Офлайн

#10 Сен. 12, 2013 16:19:39

Kentavr
Зарегистрирован: 2013-09-10
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Поясните по логическим операторам

>>> 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

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version