読み込み中...

Pythonのif文による基本的な条件分岐の書き方と活用方法10選

条件式 徹底解説 Python
この記事は約15分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

●Pythonの条件式とは?基本を押さえよう

プログラミングで欠かせない要素、それが条件式です。

特定の条件が満たされたときに特定のアクションを実行させる、まさにプログラムの司令塔と言えるでしょう。

○条件式の重要性と基本構文

Pythonの条件式の基本は、if文です。

if文の基本構文は以下のようになります。

if 条件:
    # 条件が真の場合に実行されるコード
else:
    # 条件が偽の場合に実行されるコード

この構文を見て、「なるほど、シンプルだな」と思われた方も多いのではないでしょうか。

確かに、見た目はシンプルです。しかし、このシンプルな構文の中に、無限の可能性が秘められているのです。

○サンプルコード1:シンプルなif文の使い方

では、実際にif文を使ってみましょう。

年齢を入力し、成人かどうかを判定するプログラムを作ってみます。

age = int(input("あなたの年齢を入力してください: "))

if age >= 20:
    print("あなたは成人です。")
else:
    print("あなたはまだ未成年です。")

このコードを実行すると、次のような結果が得られます。

あなたの年齢を入力してください: 25
あなたは成人です。

もし18歳と入力した場合は、次のような結果になります。

あなたの年齢を入力してください: 18
あなたはまだ未成年です。

ご覧のように、たった数行のコードで、年齢に応じて異なる出力を得ることができました。

このシンプルな例からも、条件式の力強さが伝わってきますね。

●if文をマスターしよう!5つの応用テクニック

基本を押さえたところで、より複雑な条件分岐に挑戦してみましょう。

実務では、単純なif-elseだけでは対応できないケースが多々あります。

そんな時に役立つ、5つの応用テクニックをご紹介します。

○複数条件の組み合わせ方

複数の条件を組み合わせる場合、論理演算子のandとorを使います。

andは全ての条件が真の場合に真を返し、orはいずれかの条件が真の場合に真を返します。

○サンプルコード2:and/orを使った複雑な条件

例えば、ある商品の割引条件を考えてみましょう。

会員であり、かつ5000円以上の購入、または初回購入の場合に割引を適用するプログラムを作ってみます。

is_member = True
purchase_amount = 6000
is_first_purchase = False

if (is_member and purchase_amount >= 5000) or is_first_purchase:
    print("割引が適用されます!")
else:
    print("通常価格です。")

このコードを実行すると、次のような結果が得られます。

割引が適用されます!

複数の条件を組み合わせることで、より細かな条件分岐が可能になりました。

実務では、このような複雑な条件分岐がよく使われます。

○if-elifの連鎖で多分岐を実現

次に、if-elifの連鎖を使って多分岐を実現する方法を見てみましょう。

elifは「else if」の略で、最初のif文の条件が偽の場合に、次の条件をチェックします。

○サンプルコード3:elif文を使った成績判定プログラム

学生の点数を入力し、その成績を判定するプログラムを作ってみます。

score = int(input("点数を入力してください(0-100): "))

if score >= 90:
    print("優秀です!Aランクです。")
elif score >= 80:
    print("良好です。Bランクです。")
elif score >= 70:
    print("普通です。Cランクです。")
elif score >= 60:
    print("もう少し頑張りましょう。Dランクです。")
else:
    print("不合格です。再挑戦しましょう。")

このコードを実行し、例えば85点を入力すると、次のような結果が得られます。

点数を入力してください(0-100): 85
良好です。Bランクです。

if-elifの連鎖を使うことで、複数の条件に応じて異なる処理を行うことができます。

実務では、このような多分岐の条件分岐がよく使われます。

○ネストされたif文で細かい条件分岐

さらに複雑な条件分岐を行いたい場合は、if文の中にif文を入れる「ネストされたif文」を使います。

これにより、より細かい条件分岐が可能になります。

○サンプルコード4:ネストif文で商品割引システム

あるオンラインショップの割引システムを考えてみましょう。

会員ランクと購入金額に応じて割引率が変わるプログラムを作ってみます。

member_rank = input("会員ランクを入力してください(ゴールド/シルバー/ブロンズ): ")
purchase_amount = int(input("購入金額を入力してください: "))

if member_rank == "ゴールド":
    if purchase_amount >= 10000:
        discount = 0.2
    else:
        discount = 0.1
elif member_rank == "シルバー":
    if purchase_amount >= 8000:
        discount = 0.15
    else:
        discount = 0.05
else:  # ブロンズまたはそれ以外
    if purchase_amount >= 5000:
        discount = 0.1
    else:
        discount = 0

discounted_price = purchase_amount * (1 - discount)
print(f"割引後の金額は{discounted_price}円です。")

このコードを実行し、例えばゴールド会員で12000円の購入をした場合、次のような結果が得られます。

会員ランクを入力してください(ゴールド/シルバー/ブロンズ): ゴールド
購入金額を入力してください: 12000
割引後の金額は9600.0円です。

ネストされたif文を使うことで、より複雑な条件分岐を実現できました。

実務では、このような複雑な条件分岐がよく使われます。

○一行if文で簡潔に書く方法

最後に、簡潔に条件分岐を書く方法として、一行if文を紹介します。

一行if文は、簡単な条件分岐を1行で書くことができる便利な書き方です。

○サンプルコード5:一行if文を使った偶数・奇数判定

数字を入力し、偶数か奇数かを判定するプログラムを一行if文で書いてみましょう。

number = int(input("数字を入力してください: "))
result = "偶数" if number % 2 == 0 else "奇数"
print(f"{number}は{result}です。")

このコードを実行し、例えば7を入力すると、次のような結果が得られます。

数字を入力してください: 7
7は奇数です。

一行if文を使うことで、簡潔で読みやすいコードを書くことができます。

ただし、複雑な条件分岐には適していないので、使用する場面には注意が必要です。

●三項演算子で条件分岐をスマートに!

「三項演算子」。

聞いただけでは難しそうに感じるかもしれませんが、実はとてもシンプルで使いやすい構文です。

三項演算子を使いこなすことで、複雑な条件分岐も一行で表現できるようになります。

○三項演算子の基本と使い所

三項演算子は、if-else文を一行で書くための便利な方法です。

基本的な構文は次のようになります。

結果 = 真の場合の値 if 条件 else 偽の場合の値

短く、簡潔で、読みやすい。

まさにPythonらしい書き方と言えるでしょう。

三項演算子は、条件が単純で、真偽の結果がそれぞれ1つずつの場合に特に威力を発揮します。

例えば、数値の正負を判定したり、リストの要素の有無をチェックしたりする場合に重宝します。

ただし、気をつけなければならない点もあります。

条件や結果が複雑になりすぎると、かえって読みにくくなることがあります。

そんな時は、従来のif-else文を使う方が賢明でしょう。プログラミングは表現力豊かな芸術。

時と場合に応じて、最適な表現方法を選ぶことが大切です。

○サンプルコード6:三項演算子で最大値を求める

では、実際に三項演算子を使って、2つの数値の大きい方を返す関数を作ってみましょう。

def get_max(a, b):
    return a if a > b else b

# 関数を使ってみる
result = get_max(10, 5)
print(f"10と5の大きい方は{result}です。")

result = get_max(-3, 0)
print(f"-3と0の大きい方は{result}です。")

このコードを実行すると、次のような結果が得られます。

10と5の大きい方は10です。
-3と0の大きい方は0です。

たった1行で最大値を求める関数が完成しました。従来のif-else文で書くよりもずっと簡潔ですね。

三項演算子を使うことで、コードの行数を減らし、可読性を高めることができます。

●Pythonの新しい条件分岐

Pythonの世界は常に進化し続けています。

その中でも特に注目すべき新機能の1つが「match文」です。

Python 3.10から導入されたこの新しい構文は、複雑な条件分岐をよりエレガントに書くことを可能にします。

switchケースに似ていますが、より強力で柔軟性があります。

○match文の特徴と基本構文

match文の基本的な構造は次のようになっています。

match 変数:
    case パターン1:
        # パターン1に一致した場合の処理
    case パターン2:
        # パターン2に一致した場合の処理
    case _:
        # どのパターンにも一致しなかった場合の処理

match文の魅力は、単純な値の比較だけでなく、複雑なパターンマッチングが可能な点です。

リストやタプル、辞書の構造にもマッチできるため、データ構造に基づいた分岐処理が簡単に書けるようになります。

○サンプルコード7:match文で曜日に応じた予定表示

match文の威力を体感するために、曜日に応じて予定を表示するプログラムを作ってみましょう。

def get_schedule(day):
    match day.lower():
        case "月曜日":
            return "朝会と企画会議"
        case "火曜日":
            return "プロジェクトレビュー"
        case "水曜日":
            return "自己研鑽の日"
        case "木曜日":
            return "顧客ミーティング"
        case "金曜日":
            return "週次報告会"
        case "土曜日" | "日曜日":
            return "休日です"
        case _:
            return "無効な曜日です"

# 関数を使ってみる
print(get_schedule("月曜日"))
print(get_schedule("土曜日"))
print(get_schedule("ほげほげ"))

このコードを実行すると、次のような結果が得られます。

朝会と企画会議
休日です
無効な曜日です

match文を使うことで、複数の条件分岐をスッキリと書くことができました。

特に注目すべきは、”土曜日” | “日曜日”のように、複数のパターンを1つのcaseでまとめられる点です。

if-elifの連鎖よりも見やすく、保守性も高いコードになりました。

●条件式の応用テクニック

条件式の基本を押さえたところで、より高度なテクニックに挑戦してみましょう。

上級者への道は、単に複雑なコードを書くことではありません。

むしろ、シンプルでエレガントなコードを書くことこそが真の上級者の証なのです。

○リスト内包表記と条件式の組み合わせ

リスト内包表記は、Pythonの魅力的な機能の1つです。

条件式と組み合わせることで、非常に簡潔かつ効率的なコードを書くことができます。

○サンプルコード8:条件付きリスト内包表記

1から20までの数字のリストから、3の倍数だけを抽出する処理を考えてみましょう。

numbers = [x for x in range(1, 21) if x % 3 == 0]
print(f"1から20までの3の倍数: {numbers}")

このコードを実行すると、次のような結果が得られます。

1から20までの3の倍数: [3, 6, 9, 12, 15, 18]

たった1行で、条件に合う要素だけを抽出してリストを作成できました。

リスト内包表記と条件式を組み合わせることで、可読性の高い効率的なコードが書けるようになります。

○lambdaと条件式で関数をコンパクトに

lambda関数は、名前のない小さな関数を作るための機能です。

条件式と組み合わせることで、非常にコンパクトな関数を定義できます。

○サンプルコード9:lambda関数での条件分岐

奇数か偶数かを判定する関数を、lambda式を使って定義してみましょう。

is_even = lambda x: "偶数" if x % 2 == 0 else "奇数"

# 関数を使ってみる
print(f"7は{is_even(7)}です。")
print(f"12は{is_even(12)}です。")

このコードを実行すると、次のような結果が得られます。

7は奇数です。
12は偶数です。

lambda関数と三項演算子を組み合わせることで、1行で簡潔な関数定義ができました。

ただし、複雑な処理を行う場合は通常の関数定義を使う方が読みやすくなることもあります。

状況に応じて適切な方法を選びましょう。

●エラー回避と最適化

プログラミングでは、エラーとの遭遇は避けられません。

しかし、賢明なプログラマーは、エラーを恐れるのではなく、むしろ学びの機会として捉えます。

条件式に関するエラーも例外ではありません。

適切に対処することで、より堅牢で効率的なコードを書くことができるようになります。

さあ、条件式のベストプラクティスを学び、エラーを味方につける方法を探っていきましょう。

○よくあるエラーとその対処法

条件式に関連するエラーの中でも、特に初心者がよく遭遇するものがあります。

例えば、等価演算子(==)と代入演算子(=)の混同です。

if x = 5:  # SyntaxError: invalid syntax
    print("xは5です")

代入演算子を使ってしまうと、構文エラーが発生します。

正しくは等価演算子を使用します。

if x == 5:  # 正しい書き方
    print("xは5です")

また、条件式の評価順序を誤解して思わぬバグを生み出すこともあります。

例えば、and演算子とor演算子を混在させる場合、括弧を適切に使用しないと意図しない結果になることがあります。

if a > 0 and b > 0 or c > 0:
    print("条件を満たしています")

この条件式は、(a > 0 and b > 0) or c > 0 と解釈されます。

もし意図が「aが0より大きく、かつ(bが0より大きいまたはcが0より大きい)」なら、次のように書く必要があります。

if a > 0 and (b > 0 or c > 0):
    print("条件を満たしています")

括弧を適切に使用することで、条件式の評価順序を明確にし、バグを防ぐことができます。

○パフォーマンスを考慮した条件式の書き方

条件式のパフォーマンスを向上させるコツがいくつかあります。

まず、複数の条件をチェックする場合、最も可能性の高い条件を先に配置することです。

if 頻度の高い条件:
    # 処理
elif 次に頻度の高い条件:
    # 処理
else:
    # それ以外の処理

また、短絡評価(short-circuit evaluation)を活用することも効果的です。

and演算子の場合、最初の条件が偽であれば後続の条件は評価されません。

or演算子の場合は、最初の条件が真であれば後続の条件は評価されません。

if 軽い処理の条件 and 重い処理の条件:
    # 処理

軽い処理の条件を先に配置することで、重い処理を避けられる可能性が高まります。

○サンプルコード10:最適化された条件式の例

それでは、これまで学んだテクニックを活かして、最適化された条件式の例を見てみましょう。

ユーザーの入力に基づいて、特定の条件を満たす数値のリストを生成するプログラムを作成します。

def optimized_number_filter(start, end, divisor, max_count):
    result = []
    for num in range(start, end + 1):
        if len(result) >= max_count:
            break  # 最大数に達したら早期終了
        if num % divisor == 0 and num % 2 == 0:  # 最も制限の厳しい条件を先に
            result.append(num)
    return result

# プログラムを実行
start = int(input("開始数: "))
end = int(input("終了数: "))
divisor = int(input("除数: "))
max_count = int(input("最大数: "))

filtered_numbers = optimized_number_filter(start, end, divisor, max_count)
print(f"条件を満たす数: {filtered_numbers}")

このプログラムでは、次の最適化テクニックを使用しています。

  1. 最大数に達したら早期に終了することで、不要な処理を避ける
  2. 条件式では、最も制限の厳しい条件(divisorで割り切れる)を先に配置
  3. 軽い処理(偶数判定)を後に配置し、短絡評価を活用

プログラムを実行すると、次のような結果が得られます。

開始数: 1
終了数: 100
除数: 3
最大数: 5
条件を満たす数: [6, 12, 18, 24, 30]

このように最適化された条件式を使用することで、効率的でパフォーマンスの高いコードを書くことができます。

ただし、最適化と可読性のバランスを取ることも重要です。

過度に複雑な最適化は、コードの理解と保守を難しくする可能性があります。

まとめ

Pythonの条件式について、基本から応用まで幅広く解説してきました。

さらに、三項演算子やmatch文といった、より洗練された条件分岐の方法も学びました。

本記事で紹介したテクニックを基礎として、さらに研鑽を積んでいくことで、より高度なプログラミングスキルを身につけることができるでしょう。