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
4656
И лучше бы использовать логические операторы, а не битовые...

Используется синтаксис 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
11805
Россия, Москва
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
4656
kotenok gav в сообщении #1325711 писал(а):
Писать о нем куда-то?

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

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


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

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

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

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


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

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


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

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

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

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


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

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

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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