2010-09-01 257 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