剰余で偶数判定
剰余で偶数判定 とは
% 2の剰余を使って偶数・奇数を判定します。本レッスンでは、剰余で偶数判定 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
剰余演算で偶数・奇数を判定する
剰余演算子 % は、割り算の「あまり」を求める演算子です。数学では mod と書く演算で、Python では a % b の形で書きます。たとえば 7 % 3 は 1 です。これは 7 を 3 で割ると商が 2 で余りが 1 になるからです。% は商ではなく余りだけを返すのがポイントで、整数だけでなく浮動小数点数にも使えます。
剰余演算は、プログラミングの世界では「分類」「ループの制御」「ハッシュ」など、さまざまな場面で活躍します。最も身近な使い道が「偶数・奇数判定」で、n % 2 == 0 なら偶数、n % 2 == 1 (もしくは != 0) なら奇数です。さらに n % 3 == 0 なら 3 の倍数、n % 5 == 0 なら 5 の倍数というふうに、倍数判定にも応用できます。
剰余演算子
%は、整数の世界で「余り」を扱う最も基本的な道具です。FizzBuzz の出題でも必ず登場します。
基本の動き
a % b は a を b で割ったときの余りを返します。b が 0 のときは ZeroDivisionError になります。負の数の挙動は言語によって異なりますが、Python では「結果の符号が b と一致する」というルールで動きます。次のとおりです。
Python
print(7 % 3) # 1
print(10 % 5) # 0 (割り切れる)
print(-7 % 3) # 2 (Python は b の符号に合わせる)
print(7 % -3) # -2
print(7.5 % 2) # 1.5 (float も OK)偶数判定では「n % 2 == 0 なら偶数」が定番のイディオムです。0 は偶数として扱われる点も覚えておきましょう。負の数でも % 2 == 0 で偶数判定できるので、符号を気にせず使えます。
Python
print(-4 % 2 == 0) # True (負の偶数)
print(0 % 2 == 0) # True (0 は偶数)
print(7 % 2 == 0) # False「
n % 2 == 0で偶数」はPythonだけでなく多くの言語で共通のイディオムです。覚えておくと一生使えます。
倍数判定への応用
剰余は偶数判定だけでなく、任意の倍数判定に拡張できます。たとえば「n が 3 の倍数か」は n % 3 == 0、「n が 100 の倍数か」は n % 100 == 0 です。これを組み合わせて FizzBuzz のような問題を解くこともできます。
Python
n = 15
if n % 15 == 0:
label = "FizzBuzz"
elif n % 3 == 0:
label = "Fizz"
elif n % 5 == 0:
label = "Buzz"
else:
label = str(n)
print(label) # FizzBuzz剰余はうるう年判定にも使われます。「4 で割り切れて 100 では割り切れない、または 400 で割り切れる」というルールも % で表現できます。Python ではこのように「分類のキー」として % を使うパターンが多いです。
よくある間違い
剰余演算でつまずきやすいのは次の 3 点です。1 つめは「b が 0 のときに ZeroDivisionError になる」ことを忘れるケースです。2 つめは「負の数の剰余」で他言語の感覚と違うケースで、Python では -7 % 3 が 2 になります (多くの言語では -1)。3 つめは「float で % を使うと丸め誤差が出る」ケースで、0.1 % 0.03 などは想定外の値になります。
Python
# NG (ゼロ除算)
# print(5 % 0) # ZeroDivisionError
# OK (ガードして避ける)
b = 0
if b != 0:
print(5 % b)
else:
print("divisor must not be 0")
% 0は必ずエラーになります。除数が変数のときはガード句を入れるか、try-exceptで囲みましょう。
また、bool 値を直接 if の条件として使うのも Python らしい書き方です。if n % 2: と書くと「0 以外なら真」と評価されるので、奇数判定として動きます。明示的に == 0 を書くか、bool の暗黙変換を活用するかは好みですが、読みやすさを優先するなら == 0 のほうがおすすめです。
やってみよう
今回の課題は、整数 n が偶数かどうかを判定する関数 is_even(n) を書くことです。中身は return n % 2 == 0 の 1 行で済みます。書けたら、0 や負の偶数・奇数も渡してみて、剰余の挙動を確認してください。応用として「3 の倍数判定」「100 の倍数判定」も同じ要領で書けます。剰余は奥が深く、ハッシュ値の生成や周期処理など実務でもよく使うので、ここで感覚をしっかりつかんでおきましょう。さらに、Python には divmod(a, b) という関数もあり、これは商と余りをまとめてタプル (quotient, remainder) で返します。商も同時に欲しいときは divmod を使うとシンプルに書けます。
よくある質問
Q. このトピックは Python 以外の言語でも同じ書き方ですか?
A. 考え方は他言語と共通ですが、構文や標準ライブラリは異なります。Python はインデントでブロックを表し、コロン + 改行で構造を作るのが特徴です。他言語に移行する際は基本概念を維持しつつ、構文の差分を意識して書き換えると混乱が少ないです。
Q. 実行してエラーが出た場合の対処は?
A. エラーメッセージの最後の行(TypeError や NameError などの型)から原因と該当行を確認します。Python はトレースバックが下から上に読むと「呼び出し元 → 内部」の順で辿れます。print や IDE のデバッガで途中の変数を確認すると原因が見えてきます。
Q. 次のステップで何を学ぶべきですか?
A. 本レッスンの内容を理解できたら、本文の「やってみよう」を実装し、章末クイズに進むのがおすすめです。さらに自分のミニアプリ(電卓・todo・スコア集計など)に応用するとスキルが定着します。詰まったら本文の H2 セクションに戻って読み返してください。
次のレッスン
次は 演算子優先順位 で、% 2 の剰余を使って偶数・奇数を判定します を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- 剰余で偶数判定 の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. 剰余で偶数判定 とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
要件
- % 演算子で剰余を求める
- 0 のときに True を返す
- 戻り値は bool
入出力例
test-cases.txt
is_even(4) → true
is_even(7) → false
is_even(0) → true
is_even(-2) → true
is_even(-3) → false
is_even(1) → false