[英]Why does Python evaluate this expression incorrectly?
我一直在嘗試Python的數學能力,我發現了一些有趣的行為。 它與以下表達式相關:
(4+4)+3/4/5*35-(3*(5+7))-6+434+5+5+5
>>> 415
但是,如果您在考慮標准操作順序的情況下評估表達式,則答案應為420.25。 我還用WolframAlpha進行了雙重檢查,得出了420.25的答案。 為什么Python會給出不同的答案? 它與評估這些表達式的方式有關嗎? 是否有一些約定呢? 任何信息將不勝感激,謝謝!
你想使用浮點除法。 將其更改為有效:
(4+4)+3.0/4/5*35-(3*(5+7))-6+434+5+5+5
整數除法與浮點除法的一些例子:
Python 2.7.2+ (default, Oct 4 2011, 20:06:09)
>>> 3/4
0
>>> 3.0/4
0.75
>>> 3.0/4.0
0.75
浮點除以整數是浮點運算。 Python 3改變了這一點,以便浮點除法是默認值:
Python 3.2.2 (default, Sep 5 2011, 21:17:14)
>>> 3/4
0.75
因為,在Python 2中,當運算符和操作數都是整數時, /
使用整數除法。
您可以將一個更改為浮動(如其他from __future__ import division
建議的那樣),或者使用from __future__ import division
: http : from __future__ import division
在Python 2.x中,/運算符是整數除法。 如果你寫
(4+4)+3.0/4.0/5.0*35-(3*(5+7))-6+434+5+5+5
它會給出預期的答案。
這取決於您運行的Python版本:
$ python3
Python 3.1.4 (default, Nov 12 2011, 12:16:31)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> (4+4)+3/4/5*35-(3*(5+7))-6+434+5+5+5
420.25
在Python 3之前, /
運算符執行整數除法而不是浮點運算。
它是整數除法。 在您的示例中, 3/4
計算結果為0.但是, 3.0/4.0
計算結果為0.75。
>>> (4+4)+3/4/5*35-(3*(5+7))-6+434+5+5+5
415
>>> (4+4)+3./4/5*35-(3*(5+7))-6+434+5+5+5
420.25
在Python 3及更高版本中,此行為已更改。 如果要將其默認為浮點除法,則可以導入規則。
>>> from __future__ import division
>>> (4+4)+3/4/5*35-(3*(5+7))-6+434+5+5+5
420.25
重要的是要注意,python或WolframAlpha都不會給你數學上正確的答案,因為在數學中我們在除法之前進行乘法並且在python *和/中具有相同的優先級,因此將從左到右進行求值。
3.0/4/5*35 # equal 5.25 in python
3.0/4/5*35 # equal 3.0/4/(5*35) or 0.004285714285714286 in math
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.