4

私はPythonを使って簡単な計算をするのは初めてなので、これがばかげた質問であれば申し訳ありません.

すべて整数に設定された 8 つの変数があり、これらの整数は単純な計算を実行するときに使用されます。

a = 0
b = 17
c = 152
d = 1
e = 133
f = 19
g = 20
h = 0

answer = ( ( ( a / f ) + b + c ) - ( g + ( h / f ) ) ) / ( d / f )

print answer

このコードを実行すると、ZeroDivisionError: integer division or modulo by zero というエラーが表示されます。

私はこのエラーについて読んだことがあり、すべてのドキュメントは除数がゼロであることを示していますが、変数の代わりに数値を文字列として出力すると、次のようになります。

( ( ( 0 / 19 ) + 17 + 152 ) - ( 20 + ( 0 / 19 ) ) ) / ( 1 / 19 )

このステートメントのどこにも除数ゼロはありません。

答え 2831 を得るためにどのように式を変更する必要があるか教えてください。変数の型を float などに変更できることに注意してください。ご協力ありがとうございました!

4

3 に答える 3

13

おそらくあなたは を使用していますがPython 2.xx / yは ですinteger division

したがって、以下のコードでは: -

( 20 + ( 0 / 19 ) ) ) / ( 1 / 19 )

1 / 19でありinteger division、結果は になり0ます。したがって、式は本質的に次と同じです: -

( 20 + ( 0 / 19 ) ) ) / 0

これで、エラーの原因がわかります。


python浮動小数点除算を強制するために、コードに次のインポートを追加できます。

from __future__ import division

または、いずれかを使用するか、初期値にfloat()追加するだけで、整数の 1 つを float にキャストできます。.0

于 2013-01-29T08:48:12.407 に答える
1
from __future__ import division

そしてあなたの計算をするよりも

除算が浮動小数点数を返すようになります

于 2013-01-29T08:48:55.990 に答える