四則演算で計算する
このレッスンで分かること
Pythonの四則演算は+-*/、加えて//(整数除算)%(剰余)**(べき乗) があります/は必ずfloatを返す、整数で割りたいときは//を使います- 最小例は
def calc(a, b, c): return a + b * c(*は+より優先順位が高い)
四則演算で計算する とは
Python の + - * / 演算子を組み合わせて計算結果を返す関数を書こう。本レッスンでは、四則演算で計算する の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
Python で「電卓」を作る感覚で計算する
Python は実は強力な電卓としても使えます。インタプリタを起動して 2 + 3 と入力すれば、すぐに 5 が返ってきます。このレッスンでは、四則演算 (+ - * /) を関数の中で組み合わせて、与えられた値から計算結果を作る感覚を身につけます。
プログラミングは「データを受け取って、計算して、返す」の繰り返し。四則演算はそのもっとも基本のピースです。
Python の四則演算子
Python の四則演算子は、見た目はほぼ電卓と同じです。
| 演算 | 記号 | 例 | 結果 |
|---|---|---|---|
| 足し算 | + | 3 + 2 | 5 |
| 引き算 | - | 3 - 2 | 1 |
| 掛け算 | * | 3 * 2 | 6 |
| 割り算 | / | 3 / 2 | 1.5 |
| 整数除算 | // | 7 // 2 | 3 |
| 剰余 | % | 7 % 2 | 1 |
| べき乗 | ** | 2 ** 10 | 1024 |
注目してほしいのは / で、結果が 必ず float (小数) になるということです。10 / 2 は 5 ではなく 5.0 になります。整数のまま割りたいときは // を使います。これは Python 3 の重要な仕様です。
Python
print(10 / 2) # 5.0
print(10 // 2) # 5
print(10 % 3) # 1
Python 2時代は10 / 3が3になっていましたが、Python 3では3.333...になります。古い記事を見るときは要注意。
演算子の優先順位
複数の演算子を 1 行に混ぜたときは、数学と同じ優先順位ルールが適用されます。** が最強、次に * / // %、最後に + - の順です。意図を明確にしたい場合は、迷わず () で囲みましょう。
Python
result = 2 + 3 * 4 # 14 (掛け算が先)
result = (2 + 3) * 4 # 20 (括弧が先)
result = 2 ** 3 + 1 # 9 (べき乗が先)
result = 10 - 2 * 3 + 1 # 5優先順位を表にすると次のとおりです。上にあるほど先に評価されます。
| 優先度 | 演算子 | 例 |
|---|---|---|
| 高 | ** (べき乗) | 2 ** 3 + 1 → 9 |
| 中 | * / // % (乗除) | 2 + 3 * 4 → 14 |
| 低 | + - (加減) | 10 - 2 + 1 → 9 |
| 最強 | () (括弧) | (2 + 3) * 4 → 20 |
読みやすさが何より大事なので、優先順位を覚えるのが面倒なら毎回 () を付けても OK です。慣れたエンジニアでも、複雑な式は積極的に括弧で囲んで読み手の負担を減らします。
動きを追ってみる
複数の演算子が混じった式は、評価順序が肝心です。
評価の流れを箇条書きで言い換えると、次のとおりです。
- 元の式は
2 + 3 * 4 - まず優先度の高い
3 * 4 = 12を計算 - 次に
2 + 12 = 14を計算 - 最終結果は
14
左から順に評価されるのではなく、優先順位の高い演算子から先にまとめられる、という流れです。コードを読むときも、この「内側から外側へ」の感覚で追うと早く理解できます。
よくある間違い
四則演算で初学者がはまりやすいパターンは、次のとおりです。
/を整数除算と勘違いして5を期待し、5.0が返って驚く- 演算子の優先順位を勘違いして計算ミス
- 0 で割って
ZeroDivisionError - 全角の
+/を入れてしまいSyntaxError
特に 0 除算は、ユーザー入力を受け取るプログラムでは必ず防御が必要です。if denominator != 0: のように事前にチェックする、もしくは try/except で例外を捕まえる、というのが定番です。これは後の章で詳しく扱います。
Python
a, b = 10, 0
result = a / b # ZeroDivisionError: division by zero「0 で割らない」は、
Pythonだけでなくほぼ全てのプログラミング言語に共通する鉄則です。
ここまでの要点
四則演算は + - * /、/ は float を返すので整数で割りたいときは //。優先度は ** > * / // % > + -。複雑な式は積極的に () で囲む。
やってみよう
このレッスンの課題は、a b c の 3 つの数値を受け取り、a + b * c の結果を return する関数 calc を作ることです。手順は次のとおりです。
def calc(a, b, c):で関数を定義するa + b * cをreturnする (掛け算が先に評価されるので括弧は不要)- テストを走らせて pass するか確認する
Python
def calc(a, b, c):
return a + b * c余裕があれば、関数の中で複数の計算を行って結果を組み立てる練習をしてみましょう。例えば、消費税を含めた合計金額を返す total(price, tax_rate) という関数を書くと、四則演算と関数の組み合わせがぐっと実用的になります。
Python
def total(price, tax_rate):
return price + price * tax_rate
# total(1000, 0.1) -> 1100.0計算ロジックを 1 つの関数にまとめると、後から何度でも呼べる「自分専用の電卓」になります。これがプログラミングの面白さです。
計算は単純に見えて、後で出てくる条件分岐やループの中で何度も登場します。ここで Python の演算子の癖 (/ が小数を返す、// % ** がある) をしっかり押さえておきましょう。
よくある質問
Q. 整数同士の割り算で小数を得るには?
A. Python は / で自動的に小数になります(5 / 2 → 2.5)。Java や C 系は両方を整数にすると切り捨てられるため、5.0 / 2 のように片方を浮動小数にするか (double)a / b でキャストしてください。整数の商だけ欲しいなら // や / と (int) の組み合わせを使います。
Q. 剰余 % は負の数だとどうなりますか?
A. Python は被除数の符号にかかわらず除数の符号に合わせるため、-7 % 3 は 2 になります。C 系や Java は -7 % 3 が -1 になります。負の数を扱う剰余演算(曜日計算など)は ((a % n) + n) % n のように補正するのが安全です。
Q. 演算子の優先順位はどう確認できますか?
A. * と / は + と - より優先されますが、悩んだら明示的にカッコを付けるのが事故防止に役立ちます。a + b * c と (a + b) * c の違いは典型的なバグの種です。レビュアーがすぐ意図を読み取れるよう、わずかに冗長でもカッコで囲むコーディングが好まれます。
次のレッスン
次は コメントで意図を残す で、Python の + - * / 演算子を組み合わせて計算結果を返す関数を書こう を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- 四則演算 の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. 四則演算 とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
要件
- 関数名は calc、引数は a, b, c の 3 つ
- a + b * c の結果を return する
- 演算子の優先順位を理解した上で書く
入出力例
test-cases.txt
calc(2, 3, 4) → 14
calc(0, 5, 5) → 25
calc(10, 0, 7) → 10
calc(-3, 2, 5) → 7