-3

私はここでpythonの初心者です。私は「Learning Python the hard way」で学習してきましたが、 演習 4、追加クレジット、質問 1 で問題に直面しています。

cars = 100
space_in_a_car = 4.0
drivers = 30
passengers = 90
cars_not_driven = cars - drivers
cars_driven = drivers
carpool_capacity = cars_driven * space_in_a_car
average_passengers_per_car = passengers / cars_driven


print "There are", cars, "cars available."
print "There are only", drivers, "drivers available."
print "There will be", cars_not_driven, "empty cars today."
print "We can transport", carpool_capacity, "people today."
print "We have", passengers, "to carpool today."
print "We need to put about", average_passengers_per_car, "in each car."

に 4.0 を使用しましspace_in_a_carたが、それは必要ですか? この場合、4 ではなく 4.0 が使用されるのはなぜですか?

みんなが理由を説明するのを手伝ってくれることを願っています。

4

2 に答える 2

2

4.0が行うことは、変数をintではなくfloatに入力することです。この結果、出力にcarpool_capacityもfloatと入力され、120ではなく120.0と表示されます。

編集:

あなたの例では、int精度の代わりにfloat精度を使用する理由はありませんspace_in_car。usefillである可能性がある唯一の場所は、を計算することaverage_passengers_per_car = passengers / cars_drivenです。分割後、コンマはすぐにintにキャストされるため、コンマの後ろにあるすべてのものが失われるためです。

于 2012-09-20T12:01:44.777 に答える
2

質問があなたに発見を求めていると思うことの要約

Python 2.x では、/演算子は除算に使用されます。ただし、5 と 2 などの 2 つの整数が与えられたときの動作は、ほとんどの人が予想するように、やや驚くべきものです。2.5結果は代わりに2. 5.0 / 2or 5 / 2.0(または さえも)を使用することによりfloat(5) / 2、インタープリターは予想される answer を返します2.5。簡単に言えば、操作が純粋に整数である場合、結果は整数になり、精度が失われる可能性があります。

これは Python 3.x で変更され、デフォルトの動作は精度を失わないことになりました。たとえば、5 / 2実際に...を与えるでしょう2.5...そして、整数除算のみである演算子を使用して、精度の損失を気にしないことを明示的に宣言する必要があります(たとえば、Python 2.xの動作)//-たとえば、Python 3 .xは、 Python 2.x5 // 2と同じです。5 / 2この//演算子は Python 2.x にもあります。あなたがそれについて明確にしたい場合。

そして、本当に泥のように明確にするためにfrom __future__ import division、Python 2.6 (2.5 かもしれません - 思い出せません) のモジュールの上部で使用して、/オペレーターを Python 3.x に従って動作させることができます。

注意として - pgae の一番下まで読むと、著者はこれを FAQ として持っています。

なぜスペースに 4.0 を使用したのですか?

ほとんどの場合、浮動小数点数が何であるかを調べて、この質問をすることができます。追加クレジットを見る

于 2012-09-20T12:35:50.977 に答える