Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 27, 2013 22:14:28

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

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

bot1net
Никаких 10005000 == True быть не должно, поскольку 10005000 не принадлежит множеству, над которым введена булева алгебра, всего то

щас тебя вааще порвёт
>>>True+1
2

Офлайн

#2 Апрель 28, 2013 07:47:49

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

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

Товарищи, я ни в коем случае не критикую язык, и вообще, как вы уже успели догадаться делаю первые, вероятно не очень правильные шаги, посему и пишу в ветке “Для новичков”
Для чего может понадобиться?

(1 and 3 and 2) == 3
Да, собственно, черт его знает Это действительно можно успешно заменить
 >>>1 == 2 == 3
False
Да и дизъюнкция выглядит вполне естественно
>>> if 1 or 0 or 3 == 0:
...     print 'ok'
...     
ok
Рад, что мне удалось обратить ваше внимание на столь любопытную, на мой взгляд, особенность языка

Офлайн

#3 Апрель 28, 2013 07:50:42

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

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

bismigalis, напротив, это выглядит вполне естественно

>>> True + 10
11
Ведь True это элемент булева кольца биективный 1

Офлайн

#4 Апрель 28, 2013 10:18:14

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

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

bot1net
напротив, это выглядит вполне естественно. Ведь True это элемент булева кольца биективный 1
а ну это хорошо что питон не расходится с теорией, а то мне показалось это неестественным :)

bot1net
(1 and 3 and 2) == 3
Да, собственно, черт его знает Это действительно можно успешно заменить
>>>1 == 2 == 3
False

это не одно и то же. я не пойму твоей логики
во втором случае проверяется равенство всех элементо между собой. в первом НЕ сравнивается каждый элемент с 3. Сначала вычисляется выражение в скобках, потом результат сравнивается с 3.

Отредактировано bismigalis (Апрель 28, 2013 13:56:38)

Офлайн

#5 Апрель 28, 2013 11:16:24

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

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

bismigalis, если рассуждать следующим образом. Выражение

(1 and 3 and 2) == 3
эквивалентно
if 1 == 3:
  if 3 == 3:
    if 2 == 3:
        print 'Lol'
То есть для того, чтобы напечатать ‘Lol’, достаточно равенства всех элементов выражения тройке. Вроде так… Или перефразируя. Пусть множество А включает 3 элемента, а множество В включает 1 элемент. Для получения булевой 1 необходимо и достаточно, чтобы каждый элемент множества А был в точности равен элементу множества В. Например, мы получим булеву единицу, если напишем “1 и 1 и 1 = 1”. Если ошибаюсь, поправьте

Офлайн

#6 Апрель 28, 2013 12:20:27

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

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

bot1net
Не эквивалентно.
http://docs.python.org/2/library/stdtypes.html#boolean-operations-and-or-not

Грубо говоря, несколько and работают так:

def my_and(*args):
    for arg in args:
        if not arg:
            return arg
    return args[-1]
print my_and(1, 3, 2)  # 2
print my_and(1, 3)  # 3
print my_and(0, 3)  # 0

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

Офлайн

#7 Апрель 28, 2013 13:20:36

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

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

если ты оперируешь множествами, то в питоне тоже есть множества, называются они set

>>>s1 = set([1])
>>>s2 = set([1,2,3])
>>>s1 & s2
set([1]) #результат пересечения
>>>bool(s1 & s2)
True #пересекаются

Отредактировано bismigalis (Апрель 28, 2013 13:20:47)

Офлайн

#8 Апрель 28, 2013 13:30:03

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

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

bot1net
Для получения булевой 1 необходимо и достаточно, чтобы каждый элемент множества А был в точности равен элементу множества В.Например, мы получим булеву единицу, если напишем “1 и 1 и 1 = 1”.

#python3
>>>s1 = {1, 1, 1}
>>>s2 = {1}
>>>s1 == s2
True # множества равны
>>>bool(s1 and s2)
True # оба множества истинны (не пусты)

Офлайн

#9 Апрель 28, 2013 19:21:39

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

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

reclosedev, bismigalis благодарю!

Офлайн

#10 Апрель 30, 2013 19:45:51

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

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

С наступающим Первомаем, товарищи!

from numpy import loadtxt
import scipy.stats as ss
x, y = loadtxt('data.txt', delimiter = ',', unpack = True)
reg = ss.linregress(x,y)
string = '''slope %.4f ; intercept %.4f ;
r-value %.4f ; p-value %.4f ;
stderr %.4f .''' %(reg[0],reg[1],reg[2],reg[3],reg[4])
out = open('out.txt','w')
out.write(string)
out.close()

Давеча мне рекомендовали следующее форматирование http://docs.python.org/2/tutorial/inputoutput.html#fancier-output-formatting :

>>> a=[1,2,3,4.44444444444]
>>> "a={0:2d} b={1} c={2} d={3:10.3g}".format(*a)
'a= 1 b=2 c=3 d=      4.44'

Не затруднит ли вас подсказать, что значит эта строка:
>>> "a={0:2d} b={1} c={2} d={3:10.3g}".format(*a)

Заранее благодарю!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version