Pythonでプログラムを書く際、状況に応じて処理を変えたいという場面は非常に多く存在します。そんな時に使うのがif文による条件分岐という仕組みです。
if文は「もし〇〇ならば△△を実行する」という形で、条件によって異なる処理を選択できます。この基本的な制御構文を理解することは、プログラミングの第一歩と言えるでしょう。
特にPythonのif文は、インデント(字下げ)によってブロックを表現するという独特な文法を持っています。また、elif(else if)やelseを組み合わせた複数条件の分岐や、not・and・orといった論理演算子を使った複雑な条件式も扱えます。
本記事では、Pythonのif文について基本構文から実践的な使い方まで、具体例を交えながら詳しく解説していきます。比較演算子や論理演算子の使い方、True/Falseの評価についても分かりやすく説明しますので、ぜひ最後までご覧ください。
Pythonのif文とは?基本的な仕組みと役割
それではまずif文の基本的な仕組みと、プログラムにおける役割について解説していきます。
if文の基本構文と条件分岐の概念
if文は条件式がTrueの場合にのみ、特定の処理を実行する制御構文です。基本的な構文は以下のようになります。
if 条件式:
実行する処理
条件分岐とは、プログラムの実行フローを条件によって変える仕組みのこと。例えば「年齢が20歳以上なら成人と表示する」といった処理が可能になります。
条件式が成立する(Trueと評価される)場合だけ、インデントされた部分のコードが実行されるのです。条件が成立しなければ、そのブロックは完全にスキップされます。
この単純な仕組みが、プログラムに知能を持たせる基礎となっているでしょう。状況判断や意思決定をコードで表現できるようになるのです。
インデントの重要性とPythonの特徴
Pythonの最大の特徴は、インデント(字下げ)でコードのブロックを表現することです。
多くのプログラミング言語では中括弧`{}`などでブロックを区切りますが、Pythonではインデントがブロックの範囲を決定します。これは必須のルールであり、守らないとエラーになってしまうのです。
# 正しい例
age = 25
if age >= 20:
print("成人です") # インデントされている
print("お酒が飲めます") # 同じレベルのインデント
# 間違った例(エラーになる)
# if age >= 20:
# print("成人です") # インデントがないのでエラー
インデントには通常、スペース4つ(または2つ)かタブ文字を使います。重要なのは、同じブロック内では統一すること。スペースとタブを混在させると、見た目は同じでもエラーが発生するため注意が必要でしょう。
この仕様により、Pythonのコードは自動的に読みやすい形式になります。インデントによって視覚的にコードの構造が分かりやすくなるのです。
条件式とTrue/Falseの評価
if文の条件式は、最終的にTrueまたはFalseという真偽値に評価される必要があります。これをブール値(Boolean)と呼びます。
| 値の種類 | Falseと評価されるもの | Trueと評価されるもの |
|---|---|---|
| 数値 | 0, 0.0 | 0以外の数値 |
| 文字列 | 空文字列 “” | 文字が入った文字列 |
| リスト | 空リスト [] | 要素があるリスト |
| None | None | – |
# 数値での評価
if 5:
print("0以外の数値はTrue") # 実行される
# 文字列での評価
name = ""
if name:
print("名前が入力されています")
else:
print("名前が空です") # こちらが実行される
# リストでの評価
items = []
if items:
print("アイテムがあります")
else:
print("アイテムがありません") # こちらが実行される
明示的にTrueやFalseを条件式に書くこともできますが、実際のプログラミングでは比較演算子や論理演算子を使って条件を組み立てることが多いでしょう。Pythonの柔軟な真偽値評価を理解しておくと、より簡潔なコードが書けるようになります。
if文の基本的な使い方と比較演算子
続いてはif文の実践的な使い方と、条件式でよく使われる比較演算子について確認していきます。
比較演算子を使った条件式
条件式では、値を比較するための比較演算子が頻繁に使われます。主な比較演算子は以下の通りです。
| 演算子 | 意味 | 使用例 | 結果 |
|---|---|---|---|
| == | 等しい | 5 == 5 | True |
| != | 等しくない | 5 != 3 | True |
| > | より大きい | 5 > 3 | True |
| < | より小さい | 5 < 3 | False |
| >= | 以上 | 5 >= 5 | True |
| <= | 以下 | 5 <= 3 | False |
# 数値の比較
score = 85
if score >= 80:
print("合格です")
# 文字列の比較
password = "secret"
if password == "secret":
print("ログイン成功")
else:
print("パスワードが違います")
# 不等号の組み合わせ
age = 15
if age < 18:
print("未成年です")
注意点として、等しいかどうかを判定するには`==`を使います。`=`は代入演算子なので、条件式では使えません。この違いを理解することが重要でしょう。
また、文字列の比較では大文字と小文字は区別されます。`”Hello”`と`”hello”`は等しくないと判定されるのです。
elif(else if)による複数条件の分岐
複数の条件を順番にチェックしたい場合は、elifを使って条件分岐を増やすことができます。elifはelse ifの略です。
score = 75
if score >= 90:
grade = "A"
print(f"成績: {grade}")
elif score >= 80:
grade = "B"
print(f"成績: {grade}")
elif score >= 70:
grade = "C"
print(f"成績: {grade}")
elif score >= 60:
grade = "D"
print(f"成績: {grade}")
else:
grade = "F"
print(f"成績: {grade}")
elifは必要なだけ連続して書くことができます。条件は上から順番に評価され、最初にTrueになった条件のブロックだけが実行されるという仕組みです。
つまり、複数の条件が同時にTrueでも、最初の1つしか実行されません。この動作を理解しておくことが、正しく条件分岐を組み立てるポイントとなっています。
条件の順序も重要でしょう。より具体的な条件を先に、より広い範囲の条件を後に配置するのが基本です。
elseを使ったデフォルト処理
elseは「それ以外の全ての場合」を表し、どの条件にも当てはまらなかった時の処理を記述します。
# シンプルなif-else
temperature = 15
if temperature >= 25:
print("暑いです")
else:
print("涼しいです")
# if-elif-elseの組み合わせ
hour = 14
if hour < 12:
greeting = "おはようございます"
elif hour < 18:
greeting = "こんにちは"
else:
greeting = "こんばんは"
print(greeting)
elseは省略可能です。条件に当てはまらない場合に特に何もしなくてよければ、else節は書かなくても構いません。
ただし、予期しないケースに対応するため、elseを入れておくことは良い習慣と言えるでしょう。デバッグ時にも、どの条件にも当てはまらなかった場合を検知しやすくなります。
elseには条件式を書きません。単純に`else:`とだけ記述すればよいのです。
論理演算子とnot演算子の活用
続いては複数の条件を組み合わせる論理演算子と、条件を反転させるnot演算子について確認していきます。
and演算子による複数条件の組み合わせ
and演算子は複数の条件が全てTrueの場合にのみTrueを返します。「かつ」という意味です。
# 複数条件の同時チェック
age = 25
has_license = True
if age >= 18 and has_license:
print("運転できます")
else:
print("運転できません")
# 3つ以上の条件
score = 85
attendance = 95
submitted = True
if score >= 80 and attendance >= 90 and submitted:
print("優秀賞を授与します")
and演算子の真理値表を確認しましょう。
| 条件1 | 条件2 | 条件1 and 条件2 |
|---|---|---|
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
全ての条件がTrueでなければ結果はFalseになります。つまり、厳しい条件を課す場合に使うのです。
and演算子には短絡評価(ショートサーキット)という特性があります。左側の条件がFalseならば、右側は評価されません。この性質を活用すると、効率的な条件式が書けるでしょう。
or演算子での条件の選択
or演算子は複数の条件のうち1つでもTrueならTrueを返します。「または」という意味です。
# いずれかの条件を満たせばOK
day = "土曜日"
if day == "土曜日" or day == "日曜日":
print("週末です")
else:
print("平日です")
# 複数の許可条件
role = "admin"
if role == "admin" or role == "moderator" or role == "editor":
print("編集権限があります")
else:
print("閲覧のみです")
or演算子の真理値表は以下の通りです。
| 条件1 | 条件2 | 条件1 or 条件2 |
|---|---|---|
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
or演算子も短絡評価を行います。左側の条件がTrueならば、右側は評価されずにTrueが返されるのです。
実務では、複数の許可条件やエラーチェックなど、「どれか1つでも当てはまれば」という場面でor演算子が活躍します。
not演算子で条件を反転させる方法
not演算子は条件の真偽を反転させます。TrueをFalseに、FalseをTrueに変えるのです。
# 基本的なnotの使い方
is_raining = False
if not is_raining:
print("傘は不要です")
# 否定の条件
logged_in = False
if not logged_in:
print("ログインしてください")
else:
print("ログイン済みです")
# リストが空でないことをチェック
items = [1, 2, 3]
if not items:
print("リストが空です")
else:
print("リストに要素があります")
notは単独で使うこともできますし、andやorと組み合わせることも可能です。ただし複雑になりすぎると可読性が下がるため注意が必要でしょう。
# notとandの組み合わせ
age = 15
has_permission = False
if not (age >= 18 and has_permission):
print("アクセスできません")
# 比較演算子で書き換え可能
# if age < 18 or not has_permission:
# print("アクセスできません")
notを使うことで、条件の意味を自然な日本語に近づけることができます。「ログインしていない場合」を表現するのに`not logged_in`と書く方が、条件式の意図が明確になるのです。
ただし、二重否定などは避けるべきでしょう。`not (not condition)`のような書き方は分かりにくく、バグの原因にもなります。
if文の応用テクニックと実践例
続いてはif文のより高度な使い方と、実践的なコード例を確認していきます。
ネストしたif文の使い方
if文の中に別のif文を入れ子にすることをネスト(入れ子)と呼びます。複雑な条件判定で使われます。
# ネストしたif文
age = 22
student = True
if age >= 18:
print("成人です")
if student:
print("学生割引が適用されます")
else:
print("通常料金です")
else:
print("未成年です")
if age >= 12:
print("中高生料金です")
else:
print("子供料金です")
ネストする際は、インデントのレベルに注意が必要です。Pythonではインデントでブロックを判断するため、1段階ネストするごとにインデントを1つ深くします。
ただし、ネストが深くなりすぎるとコードが読みにくくなります。3段階以上のネストは避け、論理演算子(andやor)で条件を整理するか、関数に分割することを検討しましょう。
# ネストを避ける書き方
age = 22
student = True
# ネストの代わりにandを使用
if age >= 18 and student:
print("成人の学生です")
elif age >= 18 and not student:
print("成人の非学生です")
elif age >= 12:
print("中高生です")
else:
print("子供です")
この書き方の方が、条件の全体像が把握しやすくなります。状況に応じて、ネストと論理演算子を使い分けることが大切でしょう。
三項演算子(条件式)の活用
Pythonには1行で条件分岐を書ける三項演算子があります。シンプルなif-else文を簡潔に表現できるのです。
# 通常のif-else
age = 20
if age >= 18:
status = "成人"
else:
status = "未成年"
# 三項演算子で同じ処理
age = 20
status = "成人" if age >= 18 else "未成年"
print(status)
# 実用例:最大値の選択
a = 10
b = 20
max_value = a if a > b else b
print(f"最大値: {max_value}")
# リストの要素に適用
numbers = [1, 2, 3, 4, 5]
result = ["偶数" if n % 2 == 0 else "奇数" for n in numbers]
print(result)
三項演算子の構文は`真の場合の値 if 条件式 else 偽の場合の値`となっています。読み方に慣れるまで少し違和感があるかもしれません。
使いどころとしては、変数に値を代入する際の簡単な条件分岐や、関数の引数として条件式を渡す場合などがあります。ただし複雑な処理には向いていないため、通常のif文を使った方が分かりやすいケースも多いでしょう。
可読性を最優先に、シンプルな分岐だけを三項演算子で書くのがおすすめです。
if文を使った実践的なコード例
最後に、if文を使った実践的なプログラム例をいくつか見ていきましょう。
# 例1: BMI判定プログラム
height = 1.70 # メートル
weight = 65 # キログラム
bmi = weight / (height ** 2)
if bmi < 18.5:
category = "低体重"
elif bmi < 25:
category = "普通体重"
elif bmi < 30: category = "肥満(1度)" else: category = "肥満(2度以上)" print(f"BMI: {bmi:.1f}") print(f"判定: {category}") # 例2: パスワード強度チェック password = "Pass123!" has_upper = any(c.isupper() for c in password) has_lower = any(c.islower() for c in password) has_digit = any(c.isdigit() for c in password) has_special = any(not c.isalnum() for c in password) is_long_enough = len(password) >= 8
if is_long_enough and has_upper and has_lower and has_digit and has_special:
strength = "強い"
elif is_long_enough and (has_upper or has_lower) and has_digit:
strength = "普通"
else:
strength = "弱い"
print(f"パスワード強度: {strength}")
# 例3: 割引計算
price = 5000
is_member = True
quantity = 3
discount = 0
if is_member:
discount += 10 # 会員割引10%
if quantity >= 5:
discount += 5 # まとめ買い割引5%
elif quantity >= 3:
discount += 3 # まとめ買い割引3%
final_price = price * (1 - discount / 100)
print(f"割引率: {discount}%")
print(f"最終価格: {final_price:.0f}円")
これらの例では、複数の条件を組み合わせて実用的な判定を行っています。条件式を適切に組み立てることで、複雑なビジネスロジックも表現できるのです。
実際のプログラミングでは、if文は単独で使うよりも、関数やループと組み合わせて使うことが多いでしょう。基本をしっかり理解した上で、様々な場面で応用していくことが重要です。
まとめ
Pythonのif文は条件によって処理を分岐させる基本的な制御構文です。インデントでブロックを表現するというPython独自の特徴があり、視覚的に分かりやすいコードが書けます。
比較演算子(==、!=、>、<、>=、<=)を使って条件式を作り、elif で複数条件を、else でデフォルト処理を記述できます。論理演算子のandは全条件が必要、orはいずれか1つ、notは条件の反転に使われるでしょう。
True/Falseの評価では、数値の0や空文字列、空リストなどがFalseとして扱われます。この性質を理解すると、より簡潔な条件式が書けるようになります。
三項演算子を使えば1行で簡単な条件分岐が書けますし、if文をネストさせることで複雑な条件判定も可能です。ただし可読性を保つため、ネストは浅めに抑え、論理演算子で整理することを心がけましょう。
if文はプログラミングの基礎中の基礎ですが、使いこなすことで柔軟で実用的なプログラムが作れるようになります。実際にコードを書いて試しながら、少しずつマスターしていってください。