проблема с питоном - PullRequest
       51

проблема с питоном

1 голос
/ 02 сентября 2010

Я сталкиваюсь с проблемой при делении

my max_sum = 14
total_no=4  

так, когда я делаю

print "x :", (total_sum/total_no)

, я получаю 3, а не 3,5

Я перепробовал много способов печати, но не смог, кто-нибудь может дать мне знать, как я получу формат 3.5?

Спасибо

Ответы [ 5 ]

9 голосов
/ 02 сентября 2010

В Python 2.x деление двух целых чисел по умолчанию дает вам еще одно целое число. Это часто сбивает с толку, и это было исправлено в Python 3.x. Вы можете обойти это, бросив одно из чисел в число с плавающей точкой, которое автоматически разыграет другое:

float( 14 ) / 4 == 3.5

Соответствующий PEP: номер 238 :

Текущий оператор деления (/) имеет неоднозначное значение для числовые аргументы: возвращает пол математического результат деления, если аргументы целочисленные или длинные, но это возвращает разумное приближение результата деления, если аргументы являются поплавками или сложными. Это делает выражения ожидающими плавающие или сложные результаты подвержены ошибкам, когда целые числа не ожидается, но возможно в качестве входных данных.

Он не был изменен в Python 2.x из-за серьезных проблем обратной совместимости, но был одним из основных изменений в Python 3.x. Вы можете форсировать новое деление с помощью строки

from __future__ import division

вверху вашего скрипта Python. Это __future__ -импорт - он используется для принудительного изменения синтаксиса, которое в противном случае может нарушить ваш скрипт. Есть много других __future__ импортных товаров; их часто рекомендуется использовать при подготовке к переходу на Python 3.x.

Обратите внимание, что оператор // всегда означает целочисленное деление; если вы действительно хотите это поведение, вы должны использовать его вместо /. Помните, «явное лучше, чем неявное»!

2 голосов
/ 02 сентября 2010

Вы делите два целых числа, результат будет также целым числом в Python 2. Попробуйте сделать один из ваших операндов плавающим, например max_sum = 14.0 или total_no = 4.0, чтобы получить результат с плавающей точкой.

Если вы хотите, чтобы Python 2.X вел себя немного более интуитивно, вы можете добавить

from __future__ import division

в верхней части вашего скрипта. В Python 3 деление работает так, как вы ожидали в вашем случае.

1 голос
/ 02 сентября 2010

make max_sum = 14.0 или total_no = 4.0

0 голосов
/ 02 сентября 2010

Еще один способ сделать это - импортировать деление из Python 3:

>>> from __future__ import division
>>> max_sum = 14
>>> total_no = 4
>>> print max_sum / total_no  # the way you want it
3.5
>>> print max_sum // total_no
3
0 голосов
/ 02 сентября 2010

Вы выполняете целочисленную операцию, чтобы получить ближайший целочисленный результат: 3.

Вы должны либо явно / неявно привести max_sum, либо total к float.

...