- 1
print 1 < 2 == 2 > 1 in [1,2,3] < [2,3,4,5] != 1
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−115
print 1 < 2 == 2 > 1 in [1,2,3] < [2,3,4,5] != 1
Данный кусочек кода ( взял на одном из сайтов с тестами) навел меня на мысль - а может быть люди говнокодят потому, что языки программирования позволяют это делать? Взглянув на него первая моя мысль была - что это за хрень, она не будет работать. Оказалось я был не прав.
Оу щи... Вот это неожидано. А есть какие-то причины почему так?
Вообще фантастика:
Приоритет операторов - !=, == выше всех
>,< - чуть чуть ниже
in - еще ниже.
Любители "сраные параноики, ололо, я помню наизусть приоритеты и пишу код без лишних скобок, скобки для лисперов" в очередной раз получают граблями по лбу.
Что? Наоборот же, получают ожидаемый результат.
Dummy00001: люди которые годами с чем то работают, последние кого надо спрашивать относительно того как близок их любимый язык к правилу наименьшего удивления.
Нормальные люди, когда начинают изучать сишку, долго рыдают из-за того, что 3 < x < 8 - не то, о чём они подумали. И потом долго ржут над тем, что упоротые сишники сделали такие упоротые операторы. Только чуть позже уже не ржут и уже ругают питон за то, что он выдаёт математически верный результат. Приехали.
> что он выдаёт математически верный результат
С этого момента поподробнее.
PS> И перечитайте комменты wvxvw прежде чем отвечать.
Хех, скобки надо ставить так:
(1 > [2) == True] ==> 1 > 2 and 2 == True
>>> True <= 1 <= True
True
А вы, друзья, как ни садитесь, в приоритеты не годитесь.
wvxvw спрашивал как ставить скобки чтоб получить False
>>> 1 > 2 == False
False
Так это для другого выражения, которое я для демонстрации идеи выдумал.
> как ставить скобки
Я же говорю, скобки перекрывающиеся, их никак не поставишь, только разбить на два выражения:
>>> 1 > 2 and 2 == True
False
>>> 1 > 2 and 2 == True
Прочитал как
>>> 1 > 2 and 2
True
> И перечитайте комменты wvxvw
Там про обычные бинарные операторы.
Просто в реальной жизни пишут 3 < x < 8 и не пишут (3 < x) < 8. Кстати, что это значит в математике?
Что такое (3 < x)? Результат сравнения 3 и x. Булева питушня. (3 < x) < 8 - кастуем и радуемся тому, что получилось.
Что такое (3 < x < 8)? Принадлежность промежутку.
Вроде бы логично. Для пущей логичности и симметричности бинарных операторов стоило бы сделать как в сишке. Для математической точности можно было бы запретить (3 < x) < 8.
в тру мат языках типа хаски такое и не прокатит - как минимум типы не совпадают. А математика не понимает, когда типы не совпадают
И т.д. Меня колбасит, когда я такое вижу, но, как оказалось, есть куча математиков, которые не умеют, и никогда даже не пытались программировать, и для них тут все выглядит в порядке вещей.
Для математической точности нужно запретить сравнивать буль с интом.
>Просто в реальной жизни пишут 3 < x < 8 и не пишут (3 < x) < 8. Кстати, что это значит в математике?
А что больше 5 килограмм или 2 метра? Что меньше 8 или true?
Кегдан об этом написал, только другими словами.
И всё же вернитесь к изначальному примеру:
1 > 2 == False
> 1 > 2 == False
Да, питушня какая-то, смотрится странно. 2 с False сравнивать не стоит.
Вот когда a < b < c или a == b == False, логично или хотя бы терпимо.
Хотя,
> Кегдан об этом написал, только другими словами.
Кстати, кому-нибудь помогли/помешали разные приоритеты у "<" и "==" в сишке? Это имеет какой-то смысл?
>странно
Буква т лишняя.
>Нормальные люди, когда начинают изучать сишку, долго рыдают из-за того, что 3 < x < 8 - не то, о чём они подумали.
Обратите внимание, когда возник оный wtf никто (даже питонисты, привыкшие к вкусу своего говна) не поняли почему оно так работает и выдаёт "математически верный результат". До тех пор пока не был привёден байт-код, никто не мог понять ШОЭТАЗАНАХ.
>Кстати, кому-нибудь помогли/помешали разные приоритеты у "<" и "==" в сишке?
Меня проблемы приоритетов не особо волнуют, поскольку повторюсь: я обычно расставляю скобки в неоднозначных местах.
Я не питонист, но про цепочки сразу вспомнил. А вот что дальше (начиная с in) просто не знал.
Поцчему наш гуру пейсона по кличке сёма, вместо того чтобы писать сотни комментов в хохлосрачах, не пояснил нам всего 1 (одним!) ловким и уместным комментом?
Но всё что он смог выперднуть, очередной дибильный вопрос:
> xyilka 3 дня назад # >>271756
>>Как это гавно читать?
А ты продолжай плюсовать себя и спамить говнокод, взрослый человек
Ну я бы не стал так смело говорить. Тусуясь на погромистких сайтах и обезьяна рано или поздно чему-то научится.
Но не уметь читать байт-код языка который постоянно восхваляешь, эээ мягко говоря странно.
ибо нет детерминированности. Вот когда все четко и нет возможностей лавировать - тогда заебись,четко
Как читает это нормальный человек (не динамическая питоноблядь):
1 > 2 == False
(1 > 2) == False //исходя из соображений типобезопасности
Как прочитает человек это:
False == 1 > 2
False == (1 > 2) //опять таки исходя из соображений типобезопасности, т.к. абсурдно сравнивать число с булом
http://ideone.com/VN5tGg
http://ideone.com/nsdN2I
Почему же? А если так поставить?
https://i.imgur.com/z6kwr9G.jpg
Питон же поддеривает цепочки? Или я что-то путаю?
1 < 2 == 2 > 1
1 < 2 && 2 == 2 && 2 > 1
Update: Ну вот, написал, отправил.. и страница проскроллилась к коменту, в котором говорится то же самое...