Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 27, 2013 11:39:40

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

"А не индийский ли код я написал?" или "Как быстрее/короче и т.д."

Все равно не понятно чему вы удивляетесь
В соответствии с приоритетами 0==0 это True

1 and True
>>> True
1 or True
>>> 1

or в арифметических операциях вычисляет только первый аргумент если он эквивалентен True
and вынужден вычислить все и возвращает последний.

Я не могу взять в толк что непонятного?



Офлайн

#2 Апрель 27, 2013 11:43:09

elisk
Зарегистрирован: 2013-04-09
Сообщения: 35
Репутация: +  7  -
Профиль   Отправить e-mail  

"А не индийский ли код я написал?" или "Как быстрее/короче и т.д."

bot1net
doza_and так утверждение верно, но он пишет ложь… Статью на википедии пересмотрел, возвращаемый результат неверный.
Когнитивный диссонанс у меня, однако.
>>> 1 and 0 == 0
True
>>> 1 or 0 == 0
1

Все правильно…..приоритет == выше чем у and и or
1 and 0 == 0
Сначала вычисляется 0 == 0 - это True (1)
1 and 1 - True (1)

1 or 0 == 0
Сначала вычисляется 0 == 0 - это True (1)
1 or 1 - True (1)

Операторы or и and всегда возвращают один из своих операндов. Причем второй операнд операторов or и and вычисляется, только если это необходимо для получения результата.
not x
Если x ложно, то 1, иначе 0.
x and y
Если x ложно, то x, иначе y.
x or y
Если x ложно, то y, иначе x.

Офлайн

#3 Апрель 27, 2013 12:01:03

bot1net
Зарегистрирован: 2013-01-18
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

"А не индийский ли код я написал?" или "Как быстрее/короче и т.д."

and вынужден вычислить все и возвращает последний.
То есть он вычисляет истинность/ложность каждого аргумента, но вернет последний. Спасибо огромное, теперь понятно Просто я думал, что он должен вычислить истинность/ложность всего выражения… И черт возьми, про приоритет операций не помню, либо не писали, либо пропустил…

Отредактировано bot1net (Апрель 27, 2013 12:02:40)

Офлайн

#4 Апрель 27, 2013 12:25:42

bot1net
Зарегистрирован: 2013-01-18
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

"А не индийский ли код я написал?" или "Как быстрее/короче и т.д."

А как быть со скобками? Выходит на приоритет они не влияют?

>>> (1 and 2 and 3) == 3
True

Отредактировано bot1net (Апрель 27, 2013 12:28:27)

Офлайн

#5 Апрель 27, 2013 13:29:32

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

"А не индийский ли код я написал?" или "Как быстрее/короче и т.д."

bot1net
А как быть со скобками? Выходит на приоритет они не влияют?
Кокда интерпретируются логические операции, питон приводит целочисленные значения к булевым.
В булевом представлении 0==false, 1,2,3,4…infinity == true.
(1 and 2 and 3) == 3
Тут все логично
1=true, 2=true, 3 = true, (1 and 2 and 3 ) = (true and true and true) = true, (true==3)=true



Отредактировано FishHook (Апрель 27, 2013 13:30:07)

Офлайн

#6 Апрель 27, 2013 15:02:59

bot1net
Зарегистрирован: 2013-01-18
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

"А не индийский ли код я написал?" или "Как быстрее/короче и т.д."

FishHook, примем каждое целое число, не равное нулю как однозначно соответствующему булеву true, а нуль - булеву false, тогда всякая конъюнкция будет истинной, если в ней отсутствует нуль. Мое утверждение правильно интерпретирует то, что вы имели ввиду?

Офлайн

#7 Апрель 27, 2013 16:08:52

alexbadaloff
От: Иваново
Зарегистрирован: 2013-04-11
Сообщения: 198
Репутация: +  16  -
Профиль   Отправить e-mail  

"А не индийский ли код я написал?" или "Как быстрее/короче и т.д."

bot1net
Если хотите раз и навсегда понять суть данных понятий, обратитесь к главе 9 книги Лутца “Изучаем Python. Четвертое издание” (2011 год), а именно к части “Смысл понятий «истина» и «ложь» в языке Python” (стр. 308). Всё описано очень доступно в одну страницу. Думаю, после прочтения данной страницы ваши вопросы про true/false будут неактуальны.



————————–
Истина где-то рядом

Отредактировано alexbadaloff (Апрель 27, 2013 16:15:13)

Офлайн

#8 Апрель 27, 2013 16:42:49

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

"А не индийский ли код я написал?" или "Как быстрее/короче и т.д."

FishHook
Когда интерпретируются логические операции, питон приводит целочисленные значения к булевым.
Боюсь вы не правы, по крайней мере python 2.7.3 дает не булевы результаты.
>>> (1 and 2 and 3) == 3
True
>>> (1 and 3 and 2) == 3
False
>>> 128.35 and [-38, 25.125]
[-38, 25.125]



Отредактировано doza_and (Апрель 27, 2013 16:44:35)

Офлайн

#9 Апрель 27, 2013 18:16:45

bot1net
Зарегистрирован: 2013-01-18
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

"А не индийский ли код я написал?" или "Как быстрее/короче и т.д."

doza_and, вот, собственно, от чего у меня и произошел когнитивный диссонанс…
alexbadaloff, спасибо за рекомендацию, обязательно прочитаю

Офлайн

#10 Апрель 27, 2013 18:38:03

bot1net
Зарегистрирован: 2013-01-18
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

"А не индийский ли код я написал?" или "Как быстрее/короче и т.д."

Язык программирования Python. Сузи Роман Авриевич, на с. 16 - 17. Написано про старшенство операций и т.д.
Вероятно, но не факт, что питон версии 2.7.3 имеет некоторые особенности для литералов, связанных логическими операндами. Насколько, по вашему мнению, правомерно связывать ими элементы, не входящие во множество, над которым установлена булева алгебра? Ведь, по определению Булевой алгеброй называется непустое множество A с двумя бинарными операциями AND (аналог конъюнкции), OR (аналог дизъюнкции), унарной операцией NOT(аналог отрицания) и двумя выделенными элементами: 0 (или Ложь) и 1 (или Истина). Мне кажется, что можно совершать операции булевой алгебры исключительно над множеством элементов, над которым установлена эта алгебра. Можно сказать, что булева алгебра это кольцо, состоящее только из 0 и 1, соответственно, логические операции с элементами, не входящими в данное кольцо - бессмысленны.

>>> True and True
True
>>> True and False
False
>>> False and False
False
>>> True or False
True

Отредактировано bot1net (Апрель 27, 2013 18:50:32)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version