数値と算術演算
数値はほとんどすべてのプログラムに登場します。ショッピングカートで価格を合計する。ゲームでスコアを更新する。スクリプトで何かが発生した回数を数える。Python は紙で行う計算と同じように動作する算術演算子に加えて、最初から知っておく価値のあるものをいくつか提供しています。
演算子
算数の四則演算子(+, -, *, /)は期待どおりに動作します。Python はそれに加えて、よく使う 3 つの演算子を提供します: 整数除算、剰余、べき乗です。
price = 12.99
quantity = 3
print(price * quantity) # 38.97
print(price + 2) # 14.99
print(price - 1.00) # 11.99| 演算子 | 名称 | 例 | 結果 |
|---|---|---|---|
+ | 加算 | 5 + 3 | 8 |
- | 減算 | 5 - 3 | 2 |
* | 乗算 | 5 * 3 | 15 |
/ | 除算 | 5 / 3 | 1.6666... |
// | 整数除算 | 5 // 3 | 1 |
% | 剰余 | 5 % 3 | 2 |
** | べき乗 | 5 ** 3 | 125 |
除算: / と //
/ は、答えが整数になる場合でも常に正確な小数の結果を返します。// は整数部分のみを返し、小数点以下をすべて切り捨てます。四捨五入ではなく、切り捨てです:
10 / 2 # 5.0 (常に float、割り切れる場合でも)
10 / 3 # 3.3333333333333335
10 // 3 # 3
7 // 2 # 3
-7 // 2 # -4 (ゼロ方向ではなく負の無限大方向に丸める)-7 // 2 の結果は意外に思われます。// は主に正の数で使うことが多く、その場合はこの問題は発生しません。負の数が登場したときのために、頭の片隅に置いておいてください。
剰余演算子 %
% は整数除算後の余りを返します。10 // 3 が 3 であるなら(3 は 10 に 3 回入るから)、10 % 3 は 1 です(3 × 3 = 9、10 - 9 = 1 だから)。最も一般的な用途は、ある数が偶数か奇数かを判定することです。
10 % 3 # 1
10 % 2 # 0 (割り切れる)
10 % 7 # 3
6 % 2 # 0 (偶数)
7 % 2 # 1 (奇数)べき乗 **
** は数値をべき乗します。アスタリスクを 2 つ使い、^ 記号ではない点に注意してください(Python では ^ は別の意味を持ちます):
2 ** 10 # 1024
3 ** 3 # 27
9 ** 0.5 # 3.0 (平方根: 0.5 乗する)演算子の優先順位
Python は標準的な算数の順序に従います: 最初にべき乗、次に乗算と除算、最後に加算と減算です。確信が持てない場合は括弧を使ってください。意図が明確になり、コストもかかりません:
2 + 3 * 4 # 20 ではなく 14
2 ** 3 + 1 # 512 ではなく 9
10 - 4 / 2 # 3.0 ではなく 8.0
(2 + 3) * 4 # 20
10 / (2 + 3) # 2.0int と float の相互作用
Python は一貫したルールを持っています: / は常に小数を返します(4 / 2 でも 2.0 です)。また、整数と小数を混ぜた演算は小数を返します。整数が必要な場合は // を使うか、int() で変換してください。
4 / 2 # 2.0 (常に float)
4 // 2 # 2 (int)
4 + 2 # 6 (int)
4 + 2.0 # 6.0 (float)
4 * 0.5 # 2.0 (float)浮動小数点数の精度
ほとんど誰もが一度はびっくりする落とし穴があります:
0.1 + 0.2 # 0.30000000000000004この小さな誤差は Python のバグではありません。コンピュータは小数を 2 進数で保存しますが、0.1 のような値は正確に表現できません。10 進数で 1/3 を正確に書けないのと似ています。日常的な計算のほとんどでは問題になりません。お金を表示するなら、round() や :.2f フォーマット指定子を使えば出力をきれいに保てます。
読みやすい数値リテラル
Python では大きな数を読みやすくするため、数値リテラルにアンダースコアを入れられます。Python はそれらを完全に無視します。あくまであなたのためのものです:
population = 8_100_000_000
distance_km = 384_400
pi_approx = 3.141_592_653便利な組み込み関数
abs()
abs() は絶対値を返します: 入力の符号にかかわらず常に正です。ある数値が 0 からどれだけ離れているかを知りたいとき(方向は問わないとき)に使います。
abs(-5) # 5
abs(3.7) # 3.7
abs(-0.5) # 0.5round()
round() はデフォルトで最も近い整数に丸めます。第 2 引数を渡せば、指定した小数点以下の桁数まで保持します:
round(3.7) # 4
round(3.2) # 3
round(3.14159, 2) # 3.14知っておくべき点: round(2.5) は 3 ではなく 2 を返します。Python は、値が 2 つの選択肢のちょうど中間にあるとき、最も近い偶数に丸めます。
divmod()
divmod() は商と余りを一度の呼び出しでまとめて返します。一対の値が返されるので、それを 2 つの名前にまとめて代入できます:
divmod(10, 3) # (3, 1): 商 3、余り 1
divmod(7, 2) # (3, 1)
divmod(9, 3) # (3, 0)
quotient, remainder = divmod(10, 3)
print(quotient) # 3
print(remainder) # 1(3, 1) って何?
これはタプルです: まとめて返される、固定された値のペアです。タプルには専用の章があります。今のところは、上の例のように 2 つの名前にまとめて代入することで、2 つの値を取り出せます。
実践例
チップ計算機:
bill = 45.50
tip_rate = 0.18
tip = round(bill * tip_rate, 2)
total = round(bill + tip, 2)
print(f"Bill: ${bill}")
print(f"Tip: ${tip}")
print(f"Total: ${total}")round() のおかげで、出力が長々と続く小数ではなく金額らしく見えます。

