if 文の基本

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

このレッスンで分かること

  • if 条件: で条件が True のときだけブロックを実行できます
  • else」で「そうでないとき」の処理をまとめて書けます
  • 最小例は if n % 2 == 0:\n return "even"\nelse:\n return "odd"

if 文の基本 とは

if と else を使って数値が偶数か奇数かを判定する関数を書く。本レッスンでは、if 文の基本 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

if 文の基本

プログラムが「考えて行動する」ためには、状況に応じて道を分ける仕組みが必要です。Pythonif 文は、まさにその分岐を担う最も基本的な制御構造で、True または False の評価結果に応じて実行する処理を切り替えます。本レッスンでは、ifelse を組み合わせて数値が偶数か奇数かを判定する関数を書きながら、条件分岐の感覚を身につけていきます。条件式と bool 値の関係、return で結果を返す書き方、% 演算子の使いどころなど、後の章でも頻出するエッセンスがぎゅっと詰まったテーマです。

「条件分岐は、コードに意思を与える最初のステップです」と多くの入門書が口を揃えるのは、if 文がなければプログラムはただの一本道だからです。

if 文とは何か

if 文は、与えられた条件式が True のときだけブロック内のコードを実行する仕組みです。条件式には比較演算子 ==!=><>=<= を使うことが多く、複合的な条件には andor も組み合わせます。Python ではブロックの区切りに波カッコを使わず、インデント (通常はスペース 4 つ) でブロックを表現する点が特徴です。インデントを揃えること自体が「ここからここまでが if のブロックです」という宣言になります。

インデントは飾りではなく文法そのものなので、ずれていると IndentationError が出ます。

また、if 文の条件式は bool 型に評価されるよう設計されていますが、実は 0 や空文字列 ""、空リスト []None などの falsy な値もそのまま条件として使えます。一方で 1"abc"、空でないリストなどは truthy として扱われます。これを利用すると if value: のような短い書き方が可能になります。

Python における代表的な truthy / falsy の判定は次の通りです。

値の例評価結果
True, 1, "abc", [1]truthy
False, 0, "", [], Nonefalsy

文法を確認する

最もシンプルな if / else の書き方は次の通りです。条件式の末尾には必ず : (コロン) を付け、その下の行をインデントします。

Python

def judge_sign(n): if n >= 0: return "non-negative" else: return "negative"

この関数は引数 n が 0 以上なら "non-negative"、そうでなければ "negative" を返します。else ブロックは省略可能で、その場合は条件が False のときに何もせずスキップされます。条件が満たされたかどうかで処理を二択にする、というシンプルな構造から始めるのが上達への近道です。

動きを追ってみる

偶数か奇数かを判定するには、剰余演算子 % を使うのが定番です。n % 2 の結果が 0 なら偶数、1 なら奇数とわかります。次のサンプルでは if 文で結果を切り替えています。

Python

def even_or_odd(n): if n % 2 == 0: return "even" else: return "odd" print(even_or_odd(4)) print(even_or_odd(7))

even_or_odd(4)4 % 20 なので "even"even_or_odd(7)7 % 21 なので "odd" を返します。負の数 -2 でも -2 % 20 になるので、Python の剰余は正しく偶奇を判定してくれます。0 は数学的にも偶数として扱われるので、even_or_odd(0)"even" になります。

diagram (will load when visible)

図の流れを順序リストで書き直すと、次の通りです。

  1. 関数開始、n を受け取る
  2. n % 2 == 0 を評価する
  3. 真であれば "even" を返す
  4. 偽であれば "odd" を返す
  5. 関数終了

図のように、判断のひし形から二つの矢印が伸びるイメージが if / else のメンタルモデルです。条件が複雑になっても、結局は「Yes か No か」の連続で表現できることを覚えておくと、後で出てくる elif も自然に理解できます。

よくある間違い

初学者がつまずく定番の落とし穴を 3 つ挙げます。

  1. コロンの付け忘れif n % 2 == 0 の末尾に : を書かないと SyntaxError が出ます
  2. 代入と比較の混同 — 条件に = を 1 つだけ書くのは代入で、比較は == です。if n = 0: はエラーになります
  3. インデントのずれif の下のブロックがインデントされていない、または半角スペースとタブが混在していると IndentationError です

エディタで「タブをスペース 4 つに変換」する設定をオンにしておくと、インデントの事故が激減します。

もう一つ気を付けたいのが、returnprint の取り違えです。テストで関数を評価するときは return した値が比較されるので、print("even") だけ書いて return を書かないと結果は None 扱いになります。「画面に出す」のと「関数の答えを返す」のは別物だと意識しましょう。

この章のポイント

ここまでの要点 if 条件: + 4 スペースのインデント + return。条件式は == (比較)、コロンを忘れない。これだけ守れば偶奇判定は必ず書ける。

やってみよう

本レッスンでは関数 even_or_odd(n) を完成させます。引数 n が偶数なら文字列 "even"、奇数なら "odd"return で返してください。print ではなく return を使う点に注意しましょう。テストでは 01-3100 など複数の値で確認されます。

書けたら、elif を使って 0 のときだけ "zero" を返す版や、3 の倍数のときだけ別の文字列を返す版に拡張してみると、次の章の elif がスムーズに理解できます。最初の一歩としては「条件式・コロン・インデント・return」の 4 点セットを声に出して確認しながら書くのがおすすめです。

よくある質問

Q. if 文と三項演算子はどう使い分けますか?

A. 本格的な処理が複数行になるなら if 文、値を 1 行で決めたいだけなら三項演算子(result = a if cond else b)が読みやすいです。三項演算子をネストすると一気に読みにくくなるため、条件が 3 つ以上なら if-elif-else に戻すのがおすすめです。

Q. 条件式に == ではなく = を書くとどうなりますか?

A. = は代入なので if a = 0 と書くと文法エラー(Python の場合)または常に真(C 系言語の場合)になります。等価判定は必ず == を使い、None かどうかは is None で比較するのが安全です。エディタが警告してくれることが多いので警告は無視しないようにしましょう。

Q. if のあとに else を書かなくても良いですか?

A. else は省略可能です。条件を満たさないときに何もしないなら else を書く必要はありません。ただし「条件外のケースを想定し忘れた」のか「意図的に省いた」のか後から見て分かるよう、コメントで「else は不要 (xxx のため)」と残しておくと将来の自分を助けます。

次のレッスン

次は if / elif / else で、if と else を使って数値が偶数か奇数かを判定する関数を書く を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

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

理解度チェック (30 秒)

Q. if 文の基本 とは何か、1 文で説明してください。

この章のポイント

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

関連レッスン

要件

  1. if 文を使って偶数か奇数かを判定する
  2. 偶数なら 'even'、奇数なら 'odd' を return で返す
  3. print ではなく return を使う

入出力例

test-cases.txt

even_or_odd(4)"even" even_or_odd(7)"odd" even_or_odd(0)"even" even_or_odd(1)"odd" even_or_odd(-3)"odd" even_or_odd(100)"even"

ヒント

main.py
main.py
学習モード

メモ

if 文の基本

⌘S で保存