Pythonには、組み込みの数値が3種類あります。ints、floats、complexです。ただし、この演習ではintsとfloatsだけを扱います。
intsintsは整数です。例:1234、-10、20201278。
Pythonの整数は任意精度を持ちます。桁数は、ホストシステムで利用できるメモリによってのみ制限されます。
floatsfloatsは小数点を含む数値です。例:0.0、3.14、-9.01。
浮動小数点数は、通常PythonではC言語のdoubleを使って実装されています(精度は小数点以下15桁)。ただし、その表現はホストシステムやその他の実装の詳細によって変わります。このため、浮動小数点数を扱うときには驚くようなことが起こることもありますが、ほとんどの場面では「十分」と言えます。
詳しい説明や議論は、次のリソースで確認できます。
Pythonは、intsとfloatsの間の算術を完全にサポートしています。二項算術演算子(+、-、*、/、//、%)を使うと、より狭い型の数値は、より広い型の相手に合わせて変換されます。
Pythonはintsをfloatsより狭い型と見なします。そのため、式の中で浮動小数点数を使うと、結果も必ず浮動小数点数になります。ただし、割り算では整数だけを使っても、結果は必ず浮動小数点数になります。
# The int is widened to a float here, and a float type is returned.
>>> 3 + 4.0
7.0
>>> 3 * 4.0
12.0
>>> 3 - 2.0
1.0
# Division always returns a float.
>>> 6 / 2
3.0
>>> 7 / 4
1.75
# Calculating remainders.
>>> 7 % 4
3
>>> 2 % 4
2
>>> 12.75 % 3
0.75
整数の結果が必要な場合は、//を使って結果を切り捨てることができます。
>>> 6 // 2
3
>>> 7 // 4
1
浮動小数点数を整数に変換するには、int()を使います。整数を浮動小数点数に変換するには、float()を使います。
>>> int(6 / 2)
3
>>> float(1 + 2)
3.0
友人のChandlerは、世界中のエキゾチックな国々を旅する予定です。残念ながら、Chandlerは計算が得意ではありません。旅先の両替所にだまされてしまうのではと、かなり心配しています。そして、あなたに為替計算機を作ってほしいと考えています。彼がアプリに求めている仕様は、次のとおりです:
exchange_money()関数を作成してください。仮引数は2つです:
budget:両替する予定の金額。exchange_rate:外貨1単位に相当する自国通貨の金額。この関数は、両替した後の金額を返します。
**注意:**自国通貨がUSDで、為替レート1.20でUSDをEURに両替したい場合、1.20 USD == 1 EURとなります。
>>> exchange_money(127.5, 1.2)
106.25
get_change()関数を作成してください。仮引数は2つです:
budget:両替前の金額。exchanging_value:両替のために予算から取り除かれる金額。この関数は、予算から残った金額を返します。
>>> get_change(127.5, 120)
7.5
get_value_of_bills()関数を作成してください。仮引数は2つです:
denomination:紙幣1枚の金額。number_of_bills:紙幣の合計枚数。この両替所は、決まった単位の現金しか扱いません。 受け取る合計金額は、1枚の「紙幣」、つまり1単位の金額で割り切れる必要があり、端数や余りが出ることがあります。 この関数は、両替所が返す紙幣の合計金額(端数の金額を除く)だけを返します。 残念ながら、その余りやおつりは、両替所がおまけとしてそのまま受け取ることになります。
>>> get_value_of_bills(5, 128)
640
get_number_of_bills()関数を作成してください。仮引数はamountとdenominationです。
この関数は、与えられた_金額_の中で受け取れる_紙幣の枚数_を返します。 言い換えると、最初の金額の中に、紙幣が_まるごと_何枚入るかということです。 受け取れるのは_まるごとの紙幣_だけで、紙幣の端数は受け取れません。ですから、それに合わせて割り算してください。 つまり、紙幣の単位まで_切り捨てて_いることになります。
>>> get_number_of_bills(127.5, 5)
25
get_leftover_of_bills()関数を作成してください。仮引数はamountとdenominationです。
この関数は、紙幣の単位を考えると、最初の_金額_からは返せない_残りの金額_を返します。 両替所がいくらを懐に入れるのかを正確に知ることは、とても重要です。
>>> get_leftover_of_bills(127.5, 20)
7.5
exchangeable_value()関数を作成してください。仮引数はbudget、exchange_rate、spread、denominationです。
仮引数spreadは、両替手数料として差し引かれる割合を整数で表したものです。
100で割って小数に変換する必要があります。
1.00 EUR == 1.20 USDでspreadが10の場合、実際の為替レートは1.00 EUR == 1.32 USDになります。1.20の10%は0.12で、この追加手数料が為替レートに加算されるからです。
この関数は、為替レートにspreadを加味したうえで、新しい通貨で受け取れる最大金額を返します。 通貨のdenominationは整数であり、分割できないことを忘れないでください。
**注意:**戻り値の型はintです。
>>> exchangeable_value(127.25, 1.20, 10, 20)
80
>>> exchangeable_value(127.25, 1.20, 10, 5)
95