2010-09-01 138 views
1

我在分割蟒蛇轮问题

my max_sum = 14 
total_no=4 

所以当我做

print "x :", (total_sum/total_no) 

面临的问题,我得到3,而不是3.5

我试印刷方法很多,但失败了,有人能让我知道我以3.5格式获得什么方式吗?

谢谢

+0

您正在使用哪个版本的Python? – jjnguy 2010-09-01 20:06:23

+0

它是python 2.6.5 – daydreamer 2010-09-01 20:12:10

回答

9

在Python 2.x中,将两个整数默认潜水你一个整数。这经常令人困惑,并已在Python 3.x中修复。您可以通过铸造号码之一为float绕过它,它会自动施放其他:

float(14)/4 == 3.5

相关PEP是number 238

当前的除法(/)操作员 数值参数的含义不明确:如果参数是整数或长整数,它将返回数学的 结果的分层,但如果返回分隔结果的合理近似值,则返回的合理近似值参数是漂浮或复杂。这使得表达式期望 漂浮或复杂结果容易出错,当整数不是 预期但可能作为输入。

由于严重的向后兼容性问题,它在Python 2.x中没有更改,但是它是Python 3.x中的主要更改之一。你可以在你的Python脚本的顶部用

from __future__ import division 

强制新分区。这是一个__future__-import - 它用于强制语法更改,否则可能会破坏您的脚本。还有许多其他的__future__进口;在准备迁移到Python 3.x时,它们通常是一个好主意。

请注意,//运算符总是意味着整数除法;如果你真的想要这种行为,你应该优先使用它,/。请记住,“明确优于隐含”!

+0

这工作得很好,谢谢,但想法是直接返回结果 – daydreamer 2010-09-01 20:13:28

+0

@learner:什么?我不明白你的评论。如果你想浮动除法,将其中一个参数转换为浮点数。 – katrielalex 2010-09-01 20:15:24

+0

如果您不喜欢添加'.0'或'float(')的'cruft',那么'from __future__ import division'将会修复整个脚本或交互式会话(在其中逐个输入命令)。 – 2010-09-01 20:29:34

1

化妆max_sum = 14.0或total_no = 4.0

+0

可能有助于解释@learner正在经历整数除法。 – jball 2010-09-01 20:06:59

+2

-1先发帖子回答没有帮助。如果明确表示OP需要更多帮助,请不要张贴解决问题的单行报告。 – katrielalex 2010-09-01 20:11:38

2

你正在分割两个整数,结果也将是一个整数,在python 2.尝试让你的一个操作数浮动,如max_sum = 14.0total_no = 4.0获得浮动结果。

如果你想蟒蛇2.X表现在这个问题上更直观一点,你可以在你的脚本的顶部添加

from __future__ import division 

。在python 3中,分区按照您的预期工作。

+0

这对我们有什么作用? – daydreamer 2010-09-01 20:12:37

0

你正在做一个整数运算,所以你得到最接近的整数结果:3。

您应该明确/隐含地投下max_sumtotal以浮动。

0

这样做将在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