2017-08-01 59 views
4
2 + 2/- 7 * - 7 * 8 - 5 + 7 * -3 

的Python計算這個表達式是這樣的:爲什麼Ruby和Python的數學計算是不同的

2+2/-7*-7*8-5+7*-3 == -8.0 
# True 

和Ruby這樣的:

2+2/-7*-7*8-5+7*-3 == 32 
# => true 

但正確答案是-8

我在哪裏錯了?爲什麼Ruby的結果與Python不一樣?

+8

Python 2.x會給你32,Python 3.x會給你-8。區別在於'/'是否是整數除法。 (Python 3.x改變了這一點。) – smarx

回答

9

在Python

>>> 2+2/-7*-7*8-5+7*-3 == -8.0 
True 

因爲/沒有浮點除法。

但在Ruby中/表示整數除法。

要使Python像Ruby一樣工作,您需要使用//

其分解:

在Python:

2+2/-7*-7*8-5+7*-3 
    = 2 + 2/(-7) * (-7) * 8 - 5 + 7 * (-3) 
    = 2 + 2/(-7) * (-7) * 8 - 5 + 7 * (-3) 
    = 2 + (-0.2857142857142857) * (-7) * 8 - 5 + 7 * (-3) 
    = 2 + 2.0 * 8 - 5 + 7 * (-3) 
    = 2 + 16.0 - 5 + 7 * (-3) 
    = 2 + 16.0 - 5 + 7 * (-3) 
    = 2 + 16.0 - 5 + (-21) 
    = -8.0 

在Ruby,

2+2/-7*-7*8-5+7*-3 
    = 2 + 2/(-7) * (-7) * 8 - 5 + 7 * (-3) 
    = 2 + (-1) * (-7) * 8 - 5 + 7 * (-3) 
    = 2 + 7 * 8 - 5 + 7 * (-3) 
    = 2 + 56 - 5 + 7 * (-3) 
    = 58 - 5 + (7 * -3) 
    = 53 + (7 * -3) 
    = 53 + (-21) 
    = 32 
在紅寶石

基本上(老的Python,即Python 2中):

2/(-7) == -1 

而在Python(即, Python 3中,這已自):

2/(-7) == -0.2857142857142857 
2 // (-7) == -1 

正如指出的那樣,這也是正確的,在評論中,有一個老版本的Python叫Python的2(人們仍在使用的今天! )其中/的工作方式與Ruby中的相同。雖然很多人都在等待Python 2的死亡,但它仍然在繼續(並且仍然表現不錯),所以,是的,最好是限定Python 2與Python 3的關係。從這個問題可以清楚地看出, OP使用了非限定術語「Python」來應用於Python 3,而在完美的世界中,這將是我們所能說的。畢竟,有人使用Python「1」嗎? :-)

+0

/從Python 2改爲Python 3的行爲,所以你的答案並不是普遍正確的。 –

+0

你是對的。儘管我試圖假裝Python 2不存在,但它確實存在,真相與現實應該優先於我的夢想。 :) –

+0

「大多數人都在等待Python 2死亡」。這種說法有沒有最近的來源?上次我看,Python2的用戶比Python3更多。 –

12

這個例子是簡單的:

在Ruby(和Python 2.X),1/2 == 0。在Python 3.x中,它是0.5

發生什麼事是在Ruby和Python 2中,/之間的兩個整數執行整數除法(分層結果爲真)。

以下將給你在Ruby中的-8。注意2.0,使得浮點值:

2+2.0/-7*-7*8-5+7*-3 
+1

我知道它在Python中的樓層,而不是截斷。我對Ruby不熟悉,但Ruby似乎也是地板 - 或者我不知道的其他東西是混淆我的實驗。 (我找不到任何相關的Ruby文檔。) – user2357112

+0

你說得對,謝謝!現在編輯。 – smarx

+0

@ user2357112:你說得對,相應的[doc](https://ruby-doc.org/core-2.4.0/Integer.html#method-i-2F)沒用。 Ruby整數部門使用地板,是的。 –

0

我會回答你的第一個問題。

假設你的Python和Ruby報告是正確的,顯然,只有一個地方留下來回答你的問題:「我錯在哪裏?」。也就是,

但是正確答案是-8。

正如你已經確認你自己,你的Python環境的正確答案是-8.0,併爲你的Ruby環境中,它是32

相關問題