簡體   English   中英

為什么Python不正確地評估這個表達式?

[英]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 divisionhttpfrom __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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM