はじめに
プログラムをつくるにおいて、
「ある条件を満たしたときに◯◯する」
「満たさなければ△△する」
といった処理の分岐が欠かせません。
Pythonではそれを最も簡単に書けるのが if
文です。
if
文の扱い方の基礎を固めれば、
実務・副業案件でも使える条件ロジックが書けるようになります。
今回は、条件分岐の基本や気を付けるべき点を、
私が学んだ内容とともに以下のポイントを
わかりやすくまとめていきます。
if
の基本構文- 比較演算子の選び方による条件の違い
- インデントのずれがエラーを起こす落としやすさ
in
演算子や複数条件
(and
・or
・短絡評価)の扱い- Python特有の偽(0・空文字・Noneなど)判定
の細かなルール
この記事はこんな人におすすめ!
- Pythonの基本を学びたい方
- プログラミング未経験の方
- 比較・論理演算子の使い方で迷いやすい方
in
やNone
判定の最適な書き方
を押さえておきたい方- Pythonの真偽判定ルールを理解したい方
第1章:if文の基本構文とインデントのルール
if文の基本構文
Pythonの基本的な条件分岐は以下のように記述します。
if 条件式:
処理A
elif 他の条件式:
処理B
else:
処理C
ポイント:
条件式
は真(True)/偽(False)を返す式- 最初の
if
条件が True なら処理Aを実行し、
それ以外なら続くelif
/else
が
順番に判断されます else
はどの条件にも当てはまらない場合に、
到達する- 各キーワード(
if
,elif
,else
)の後には
コロン:
が必要になる - 各条件ごとの処理は
インデントされたブロックに記述する
インデント(字下げ)の重要性
Pythonでは、C#やJavaのように
ブロック定義に波括弧 {}
を使いません。
Pythonでのブロック定義は、
インデント(字下げ)でコードブロックを定義します。
また、ブロック内のすべての行が
同じインデント幅で揃っていないと、
Pythonは文法的にエラーとみなします
たとえば、以下のような場合はエラーとなります。
※IndentationError
や TabError
が発生
(インデントにスペースやTabが混在している場合も同様)
if x > 0:
print("positive")
print("done") # インデント幅の不一致:エラーになる
ポイント:
- 改行後の最初の文字位置が揃っていないだけでも
エラーになる - 見た目が揃っていても、実際に使われている
空白の数が違うとエラーになる
インデントルール:
- 同じブロック内はすべて揃えて字下げ
- インデント幅は慣例で「スペース4つ」
を使うのが一般的(PEP8スタイル推奨) - Tab と Space は混ぜずに統一
(例:スペース4つで統一) - ブロックが終われば、インデントを戻す
(0スペースに戻す)
第2章:比較演算子・in演算子
比較演算子の基本
Pythonでは、値同士を比較して真偽の結果を得るために
比較演算子を使います。
主要なものは次の通りです。
演算子 | 内容 |
---|---|
== | 等しい |
!= | 等しくない |
< | より小さい |
> | より大きい |
<= | 以下 |
>= | 以上 |
比較例:
a = 5
b = 10
print(a == b) # False
print(a != b) # True
print(a < b) # True
print(a >= 5) # True
比較演算子を用いた式はTrueまたはFalseを返します。
そのため、if
分の条件式として利用することが可能です。
in演算子
文字列やリスト、タプルなど反復可能なオブジェクトに対して、
特定の要素が含まれているかどうか
を調べるには in
演算子を使います。
用途としては、
- 文字列内の部分一致
- リスト内の要素チェック
などが利用場面としては多いのかなといった印象です。
文字列内の部分一致:
text = "Python programming"
if "Python" in text:
print("Pythonが含まれています!")
リスト内の要素チェック:
fruits = ["apple", "banana", "cherry"]
if "banana" in fruits:
print("banana がリストにあります")
逆に含まれない場合は not in
を使います。
fruits = ["apple", "banana", "cherry"]
if "peach" not in fruits:
print("peach はリストにありません")
比較演算子の組み合わせ
Pythonでは<
,>
,<=
,>=
は
直感的に組み合わせることが可能です。
それにより、より厳密な条件分岐が可能です。
age = int(input("年齢を入力してください: "))
if 18 <= age <= 65: #18歳以上、65歳以下が条件
print("成年かつ定年前の年齢です")
注意点としては、不等号の向きが異なる場合です。
# 一見正しそうでも意味不明な条件になる
if 35 >= age <= 24:
print("条件を満たす") # これは成立しません
この式は、「35 >= age」かつ「age <= 24」
という評価になります。
論理的には「age が 35以下 かつ 24以下」であり、
ageが24以下でなければ成立しないという、
直感と異なる結果になります。
そのため、不等号の向きが違う場合は、
後述する論理演算子を使って明示的に書く必要があります。
# ✅ 明示的に書いたほうが安全
if 35 <= age or 24 >= age:
print("35歳以上または24歳以下です")
このようにすれば、
より明確かつバグを防ぐ安全なコードになります。
比較演算子の落とし穴
- 数値と文字列の混合比較
if "10" == 10: # Falseになります。型も比較対象
第3章:論理演算子(and / or / not)と短絡評価
論理演算子とは
複数の条件を組み合わせて判断するのに
利用する演算子を論理演算子といいます。
Pythonでは以下が論理演算子です。
and
:
両方の条件が True のときだけ全体が Trueor
:
どちらか一方が True なら全体が Truenot
:
条件を 反転させる
(True → False、False → True)
a = 5
if a > 0 and a < 10: #aが0より大きく、10より小さい
print("0 < a < 10")
if a == 0 or a == 10: #aが0又は10
print("a is 0 or 10")
if not a == 20: #aが20以外
print("a is not 20")
短絡評価(ショートサーキット)
Pythonの論理演算子のうち、 and
と or
は 短絡評価を行います。
短絡評価とは、結果が確定したタイミングで評価を決定し、
それ以降の評価をスキップする仕組みです。
不要な処理を回避できるので、
効率的かつ安全に条件チェックができます。
and
:
左がFalse
→ 右は評価せずにFalse
固定or
:
左がTrue
→ 右は評価せずにTrue
固定
def true_func():
print("True is called")
return True
def false_func():
print("False is called")
return False
print(false_func() and true_func())
# 出力:False is called
# False
# true_func() は呼ばれない
print(true_func() or false_func())
# 出力:True is called
# True
# false_func() は呼ばれない
注意点・落とし穴
and
とor
は、
常に True/False を返すわけでなく、
最後に評価された値(オブジェクト)を返す
a = 0 and "hello" # 変数aの値は、 0
b = "" or "default" # 変数bの値は、 "default"
これは、bool(true,false)以外にも
真偽値のルールがあるためです。
- 数値において、0を偽、それ以外を真として扱う
- 文字列において、ブランク(空白)を偽、
それ以外を真として扱う
第4章:ネストされたifとPython独特の真偽判定
ネスト (入れ子) 構造
if
文を入れ子にすることで、
より細かい条件分岐が可能になります。
これをif
文のネストと呼びます。
age = int(input("年齢を入力してください:"))
if age >= 18:
print("おとな料金です")
status = input("会員ですか? (yes/no): ")
if status == "yes": #if文内でさらに条件分岐(ネスト)
print("会員割引が適用されます")
else:
print("通常料金です")
else:
print("こども料金です")
上記のコードは、
- 最初に大項目(年齢)で分けたあと、
- 会員かどうかで内部でさらに分岐しています
ネストが深くなると可読性が落ちるため、
途中で関数化するなど整理が重要です。
関数化についてはまた別の記事でまとめます。
真偽判定の基本ルール
論理演算子の落とし穴で少し触れましたが、
Pythonでは、以下の値がFalseとみなされます。
- 数値:
0
,0.0
- 空のシーケンス:
""
,[]
,()
- 空のコンテナ:
{}
,set()
None
これら以外の値はTrueと評価されます。
Noneの判定方法
Pythonでは、None
は
唯一無二の「値がないこと」を表す特別なオブジェクトです。
そのため、None
の判定には、他の比較演算子と異なりis
キーワードを用いて判定するのが
ベストプラクティスとなります。
result = None
if result is None:
print("値が未設定です")
if result == None: # 判定は可能
print("比較しているけれど、== は避けたい")
ポイント:
is None
:
オブジェクトの同一性を比較、
推奨される書き方== None
:==
の挙動がカスタムされているクラスでは
予期せぬ挙動を取る可能性がある
第5章:まとめ & 次回予告
今回は、Pythonの条件分岐に関する基礎をまとめていきました。
if
文を中心に、
比較演算子・論理演算子・in
演算子・is None
を使った判定、
そして False
とみなされる値
(0、空文字、None など)の特徴、
Pythonならではの条件制御の書き方を段階的にまとめました。
条件分岐はプログラミングで処理を作っていくうえで、
欠かせない考え方です。
使いこなせるようになると、
より大規模なプログラムを組めるようになっていきます。
また、if
文ではネストを深くしすぎず、
コードの読みやすさを意識することも、
実務・副業で活躍するうえで重要です。
次回は、条件分岐と並ぶ
プログラミングのもう一つの柱となる処理構造、
繰り返し処理(ループ)について学習していく予定です。
繰り返し処理は、プログラミング未経験のうちは
イメージがつかみにくい印象がありますが、
for
文とwhile
文の基本構文と違いrange()
を使った反復処理- break / continue の使い方
- ネストされるループなどの応用
- 実務に役立つループパターンの紹介
など、つまずきやすいポイントも含めて
しっかり整理していきます。
繰り返し処理を習得すれば、
データの一覧処理や自動化にも強くなり、
Pythonの実力が一段とレベルアップします。
これからIT未経験で副業を考えているなら、必須の内容です。
▶次回の記事はこちら:
[現在準備中です!少々お待ちください!]