Арифметика не работает в Python?

Когда я делаю этот расчет 2*(5+5/(3+3))*3, я получаю 30 в Python (2.7). Но кажется, что 2*(5+5/(3+3))*3 равно 35. Может кто-нибудь сказать мне, почему python дает мне ответ 30 вместо 35? Я тестировал с помощью JavaScript, Lua и Mac Calculator, и они показывают мне 35.

Почему Python считает неправильно?

http://ideone.com/yiFJxS


person LUCAS    schedule 28.04.2016    source источник
comment
Интересно, что Python 3 дает 35...   -  person Jongware    schedule 28.04.2016
comment
/ всегда является целочисленным делением в Python 2.   -  person Daniel Roseman    schedule 28.04.2016
comment
Это потому, что 5/6 дает 0 в python 2, а все остальные оценивают его как десятичный вывод.   -  person Kamehameha    schedule 28.04.2016
comment
@DanielRoseman: так что же было исправлено в Python 3? / переводит свои аргументы в число с плавающей запятой?   -  person Jongware    schedule 28.04.2016
comment
Примечание: это питон 2.7   -  person LUCAS    schedule 28.04.2016
comment
Нет, но результат деления двух целых чисел в Python 3 всегда является числом с плавающей запятой. См. docs.python.org/2/howto/pyporting.html#division   -  person Daniel Roseman    schedule 28.04.2016
comment
Окей, спасибо. Все, что мне нужно, это изменить целые числа на плавающие при делении. Tnx.   -  person LUCAS    schedule 28.04.2016
comment
2*(5+5/float(3+3))*3 работает. 5+5/(3+3) округляется в меньшую сторону или выглядит как int(), кажется   -  person jDo    schedule 28.04.2016
comment
Да, Python 3, кажется, предполагает, что это число с плавающей запятой, Python 2 дает вам целое число. 2*(5+5./(3+3))*3 дает 35,0. Поэтому, вероятно, лучше самостоятельно проверить возможное целочисленное деление и использовать там числа с плавающей запятой.   -  person Frederic Klein    schedule 28.04.2016
comment
Разделение Python на 0, 1 и 2 уже давно считается сломанным. Теперь это исправлено в Python 3. Пожалуйста, переключитесь на Python 3, который является самым разумным решением, или иным образом используйте from __future__ import division   -  person Antti Haapala    schedule 28.04.2016
comment
@DanielRoseman / не всегда является целочисленным делением в Python 2. // OTOH всегда является делением пола как в Python 2, так и в 3.   -  person Antti Haapala    schedule 28.04.2016


Ответы (2)


Это происходит из-за фрагмента 5/(3 + 3), который оценивается как 0. Вам нужно использовать любой из них как float.

person Anshu Kumar    schedule 28.04.2016

Всегда предполагайте, что проблема связана с чем-то, что вы делаете, а не с целым языком программирования!

Он отлично работает для меня в оболочке Python. 35 — ожидаемый ответ, а 35 — то, что мы получили! Скорее всего, что-то с вашей стороны или опечатка/вы что-то прокомментировали. Это из-за копирования вашего кода выше.

edit: Кто, скорее всего, ошибается, человек? Или массы? Бритва Оккама. В этом случае я предположил, что он использует 3, а не 2,7, что привело к правильному предположению, поскольку оно работает в 3.

person MildCorma    schedule 28.04.2016
comment
Если вы всегда предполагаете, что проблема связана с вами, вы никогда не найдете ошибок в языке. - person erip; 28.04.2016