6

私はPythonの数学的能力を実験してきましたが、いくつかの興味深い振る舞いに出くわしました。これは、次の式に関連しています。

(4+4)+3/4/5*35-(3*(5+7))-6+434+5+5+5

>>> 415

ただし、標準の演算順序を念頭に置いて式を評価すると、答えは420.25になります。また、420.25の答えが得られるWolframAlphaを再確認しました。Pythonが別の答えを出すのはなぜですか?そのような表現をどのように評価するかと関係がありますか?次のような慣習はありますか?どんな情報でも大歓迎です、ありがとう!

4

6 に答える 6

10

浮動小数点除算を使用したい。これに変更すると、次のように機能します。

(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
于 2012-02-17T20:05:21.917 に答える
7

Python 2では/、演算子とオペランドの両方が整数の場合に整数除算を使用するためです。

1つをfloatに変更するか(他の回答者が提案しているように)、次を使用できますfrom __future__ import divisionhttp ://www.python.org/dev/peps/pep-0238/

于 2012-02-17T20:05:40.880 に答える
4

Python 2.xでは、/演算子は整数除算です。あなたが書くなら

(4+4)+3.0/4.0/5.0*35-(3*(5+7))-6+434+5+5+5

それは期待される答えを与えるでしょう。

于 2012-02-17T20:05:03.147 に答える
4

これは、実行している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より前では、/演算子は浮動小数点の代わりに整数除算を実行していました。

于 2012-02-17T20:05:27.767 に答える
3

整数除算です。あなたの例では、3/4は0と評価されます。ただし、3.0/4.00.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
于 2012-02-17T20:08:22.940 に答える
1

数学では除算の前に乗算を行い、Python *および/は同じ優先順位を持っているため、左から右に評価されるため、pythonもWolframAlphaも数学的に正しい答えを与えないことに注意することが重要です。

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
于 2012-02-17T20:21:12.163 に答える