剰余で偶数判定

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

剰余で偶数判定 とは

% 2 の剰余を使って偶数・奇数を判定します。本レッスンでは、剰余で偶数判定 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

剰余演算で偶数・奇数を判定する

剰余演算子 % は、割り算の「あまり」を求める演算子です。数学では mod と書く演算で、Python では a % b の形で書きます。たとえば 7 % 31 です。これは 73 で割ると商が 2 で余りが 1 になるからです。% は商ではなく余りだけを返すのがポイントで、整数だけでなく浮動小数点数にも使えます。

剰余演算は、プログラミングの世界では「分類」「ループの制御」「ハッシュ」など、さまざまな場面で活躍します。最も身近な使い道が「偶数・奇数判定」で、n % 2 == 0 なら偶数、n % 2 == 1 (もしくは != 0) なら奇数です。さらに n % 3 == 0 なら 3 の倍数、n % 5 == 0 なら 5 の倍数というふうに、倍数判定にも応用できます。

剰余演算子 % は、整数の世界で「余り」を扱う最も基本的な道具です。FizzBuzz の出題でも必ず登場します。

基本の動き

a % bab で割ったときの余りを返します。b0 のときは 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
diagram (will load when visible)

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 つめは「b0 のときに ZeroDivisionError になる」ことを忘れるケースです。2 つめは「負の数の剰余」で他言語の感覚と違うケースで、Python では -7 % 32 になります (多くの言語では -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 つができることを確認しましょう。

  1. 剰余で偶数判定 の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. 剰余で偶数判定 とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

要件

  1. % 演算子で剰余を求める
  2. 0 のときに True を返す
  3. 戻り値は 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

ヒント

main.py
main.py
学習モード

メモ

剰余で偶数判定

⌘S で保存