2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Баг в Python
Сообщение10.07.2018, 15:18 


21/05/16
4292
Аделаида
Ввожу в Python 3.6.1:
Используется синтаксис Python
x=[" ", " ", " ", "X", "X", "X", " ", "O", "O"]
print(x[0]==x[1]==x[2]=="X" + x[3]==x[4]==x[5]=="X")

Он почему-то выводит False. Это баг?

 Профиль  
                  
 
 Re: Баг в Python
Сообщение10.07.2018, 15:39 


07/08/14
4231
Вообще интересно
Используется синтаксис Python
>>> y=1==1
>>> x=2==2
>>> print (y)
True
>>> print(x)
True
>>> print (x+y)
2
>>> print(1==1 + 2==2)
False
>>> print(y&x)
True

 

 Профиль  
                  
 
 Re: Баг в Python
Сообщение10.07.2018, 15:44 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Предлагаю расставить скобки.

 Профиль  
                  
 
 Re: Баг в Python
Сообщение10.07.2018, 15:44 


07/08/14
4231
Используется синтаксис Python
>>> 1==1&2==2
False
>>> (1==1)+(2==2)
2
>>> (1==1)&(2==2)
True
>>> 1==1&1==1
True
 

 Профиль  
                  
 
 Re: Баг в Python
Сообщение10.07.2018, 15:55 
Заслуженный участник
Аватара пользователя


01/09/13
4321
И лучше бы использовать логические операторы, а не битовые...

Используется синтаксис Python
>>> (1==1)|(2)
3
>>> (1==1)&(2)
0
>>> (1==1)and(2)
2

 Профиль  
                  
 
 Re: Баг в Python
Сообщение10.07.2018, 18:51 


21/05/16
4292
Аделаида
kotenok gav в сообщении #1325670 писал(а):
Ввожу в Python 3.6.1:
Используется синтаксис Python
x=[" ", " ", " ", "X", "X", "X", " ", "O", "O"]
print(x[0]==x[1]==x[2]=="X" + x[3]==x[4]==x[5]=="X")

Он почему-то выводит False. Это баг?

Еще забыл написать. На это:
Используется синтаксис Python
print(x[0]==x[1]==x[2]=="X", x[3]==x[4]==x[5]=="X", (False + True)==True)

Python выводит "False True True". То есть это не может не быть багом. Этот баг известен? Писать о нем куда-то? Ван Россуму?

 Профиль  
                  
 
 Re: Баг в Python
Сообщение10.07.2018, 18:59 
Заслуженный участник


20/08/14
11182
Россия, Москва
kotenok gav
Вы уверены что операция + выполняется после операций ==? А проверить? Выше уже предложили расставить скобки и сравнить вывод. Подозреваю, даже полностью уверен так как проверил, ваш код выполняется так:
Используется синтаксис Python
print(x[0]==x[1]==x[2]==    ("X" + x[3])    ==x[4]==x[5]=="X")
А код
Используется синтаксис Python
print((x[0]==x[1]==x[2]=="X") + (x[3]==x[4]==x[5]=="X"))
выдаёт совершенно правильное значение "1" (0+1=1).

И обсуждать тут больше нечего. Вот от таких ошибок и спасает строгая типизация ...

 Профиль  
                  
 
 Re: Баг в Python
Сообщение10.07.2018, 21:49 
Заслуженный участник
Аватара пользователя


01/09/13
4321
kotenok gav в сообщении #1325711 писал(а):
Писать о нем куда-то?

Для начала, прочитать спецификацию. Затем привести конкретный пункт этой спецификации, который Вы назвали "багом"... либо описать, формально, несоответствие пошагового применения спецификации к данному выражению с получаемыми результатами.

 Профиль  
                  
 
 Re: Баг в Python
Сообщение10.07.2018, 22:38 
Заслуженный участник
Аватара пользователя


16/07/14
8481
Цюрих
Dmitriy40 в сообщении #1325712 писал(а):
Вот от таких ошибок и спасает строгая типизация
В питоне строгая типизация. Но причем она тут?
Тут два неочевидных момента: приоритет операций (более очевидный - все же пишут 2 + 2 == 4) и chain comparison.

(Про вопросы о сообщении о багах)

Баги в популярных интерпретаторах / компиляторах, конечно, встречаются. Но вплоть до очень высокого уровня шансов, что это вы чего-то не понимаете, гораздо больше.

 Профиль  
                  
 
 Re: Баг в Python
Сообщение11.07.2018, 01:33 
Заслуженный участник


20/08/14
11182
Россия, Москва
Да, исходное выражение строгая типизация (строгий контроль типов операндов) не спасёт, тут я перегнул. Но хотя бы False+True запретит, что стало бы намёком на причину непонимания.

 Профиль  
                  
 
 Re: Баг в Python
Сообщение11.07.2018, 01:41 
Заслуженный участник
Аватара пользователя


01/09/13
4321
Dmitriy40 в сообщении #1325769 писал(а):
Но хотя бы False+True запретит

Зачем? Допустим, мне нужно выполнение (любых) трёх условий из пяти...

Большая неприятность, как я её вижу, скорее в том, что true это единица...

 Профиль  
                  
 
 Re: Баг в Python
Сообщение11.07.2018, 01:46 
Заслуженный участник


20/08/14
11182
Россия, Москва
Geen
А давайте не будем в 100500-й раз обсуждать преимущества и недостатки строгой типизации (строгого контроля типов операндов)? Спасибо.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Dmitriy40


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group