【便利】PythonでSwitch文を作るなら|コード付きで解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新日:2023年7月)

✔このような方へ向けて書かれた記事となります

「PythonでSwitch文は作れるの?」
「PythonでSwitch文を作るとしたらどうしたら良いのだろうか?」
「PythonでSwitch文に相当する実例を見てみたい」

✔当記事を通じてお伝えすること

  • PythonのSwitch文概要
  • Switch文に相当する書き方
  • PythonでSwitch文を用いた具体例

当記事では、PythonでSwitch文がどのように実装できるかを、実例を交えてわかりやすく解説しています。

ぜひ最後までお読みください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間17万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

PythonにおけるSwitch文の前提知識

こちらでは、PythonにおけるSwitch文を理解するための前提知識についてお伝えします。

  • Switch文とは
  • Pythonでの代替方法の必要性

Switch文とは

Switch文は、多くのプログラミング言語で見られる制御文です。

この文は、変数の値に基づいて、多くの異なるアクションまたはコードブロックのいずれかを実行するために使用されます。

if-else文とは異なり、Switch文は通常、コードをより整理され、読みやすくします。

例:C言語のSwitch文

switch (x) {
    case 1:
        printf("x is 1");
        break;
    case 2:
        printf("x is 2");
        break;
    default:
        printf("x is neither 1 nor 2");
}

Pythonでの代替方法の必要性

Python言語はSwitch文をサポートしていません。

Pythonの設計哲学は、明確で読みやすいコードを重視するため、Switch文が不要とされたのです。

しかし、多くの条件を持つプログラムではSwitch文が便利であるため、PythonでもSwitch文の代替手段を模索する必要があります。

PythonにおけるSwitch文の代替手段

PythonでSwitch文のような機能を実現するには、if-elif-elseを使う方法と辞書を使う方法があります。

  • if-elif-elseを使う方法
  • 辞書を使う方法

if-elif-elseを使う方法

Switch文に代わる方法として、if-elif-else文があります。

その構文と具体例をご覧ください。

  • 基本構文
  • 実践例と注意事項

基本構文

Pythonでは、if, elif, elseキーワードを使用してSwitch文のような条件分岐をおこなえます。

x = 1

if x == 1:
    print("x is 1")
elif x == 2:
    print("x is 2")
else:
    print("x is neither 1 nor 2")

実践例と注意事項

上記の基本構文を使用して、実際のプログラムで複数の条件を持つ場合の処理をおこなえます。

ただし条件が多い場合、if-elif-else文が長くなり、可読性が低下することがあるため注意が必要です。

day = "Tuesday"

if day == "Monday":
    print("Today is Monday")
elif day == "Tuesday":
    print("Today is Tuesday")
elif day == "Wednesday":
    print("Today is Wednesday")
# ... 続きます。。。
else:
    print("Invalid day")

辞書を使う方法

if-elif-else文以外にも辞書を使う方法があります。

少しトリッキーなやり方なので、詳しく見ていきましょう。

  • 基本構文
  • 実践例と注意事項

基本構文

辞書を使用してSwitch文のような条件分岐が実装できます。

この方法では、辞書のキーを条件とし、値に関数を指定するのです。

def case_1():
    return "This is case 1"

def case_2():
    return "This is case 2"

switch_dict = {
    1: case_1,
    2: case_2
}

x = 1
print(switch_dict.get(x, lambda: "Invalid case")())

実践例と注意事項

辞書を使用したSwitch文の代替は、特に大量の条件分岐が存在する場合に有効です。

コードの可読性を保てます。

def monday():
    return "Today is Monday"

def tuesday():
    return "Today is Tuesday"

def default():
    return "Invalid day"

days = {
    "Monday": monday,
    "Tuesday": tuesday
}

day = "Monday"
action = days.get(day, default)
print(action())

ただし、辞書内に関数を用意する必要があるため、簡潔な条件分岐には向いていない可能性があります。

Python 3.10以降で利用可能なmatch文

Python 3.10では、新たな制御文であるmatch文が導入されました。

これは、他言語のSwitch文に似た機能を提供するものです。

  • match文とは
  • 基本構文と使い方
  • 例題と注意事項

match文とは

Pythonにおいて、match文はPEP 634で提案された新しい制御構造のひとつです。

この構文は、パターンマッチング(pattern matching)を実現するために導入されました。

match文により、与えられた値を複数のパターンにマッチさせ、最初にマッチしたパターンに基づいて対応するコードブロックを実行できます。

パターンは様々な形式で指定でき、定数、変数、リテラル、データ構造などを使ってマッチングが可能です。

以下に、match文の基本的な構文と使用例を示します。

match value:
    case pattern_1:
        # パターン1にマッチした場合の処理
    case pattern_2:
        # パターン2にマッチした場合の処理
    ...
    case pattern_n:
        # パターンnにマッチした場合の処理
    case _:
        # どのパターンにもマッチしなかった場合の処理

以下に、match文の使用例を示します。

def calculate_grade(score):
    match score:
        case 90 <= score <= 100:
            return "A"
        case 80 <= score < 90:
            return "B"
        case 70 <= score < 80:
            return "C"
        case 60 <= score < 70:
            return "D"
        case _:
            return "F"

grade = calculate_grade(85)
print(grade)  # 結果: "B"

この例では、calculate_grade関数に与えられたスコアに基づいて、成績を計算するためにmatch文を使用しています。

match文はスコアの値を複数のパターンにマッチさせ、最初にマッチしたパターンに基づいて該当する成績を返すもの。

match文はPython 3.10以降で利用可能であり、柔軟で強力なパターンマッチングを実現するための新しい機能です。

コードの可読性と保守性を向上させるために、適切な場面で利用しましょう。

基本構文と使い方

match文は次のように使用することができます。

def get_day_name(day_number):
    match day_number:
        case 0:
            return "Sunday"
        case 1:
            return "Monday"
        case 2:
            return "Tuesday"
        # ...
        case _:
            return "Invalid day number"

例題と注意事項

match文はパターンマッチングをサポートしており、リストやタプルなどのデータ構造にも使用できます。

これにより、コードがより柔軟で表現豊かになるでしょう。

def match_shapes(shape):
    match shape:
        case ("circle", radius) if radius > 0:
            return f"A circle with radius {radius}"
        case ("rectangle", width, height) if width > 0 and height > 0:
            return f"A rectangle with width {width} and height {height}"
        case _:
            return "Invalid shape"

print(match_shapes(("circle", 5)))
print(match_shapes(("rectangle", 2, 3)))

match文を使用する際の注意点として、caseブロック内の条件は、上から順に評価されるため、具体的な条件を上に、一般的な条件を下に配置する必要があります。

パターンマッチングを使いすぎると、コードの可読性が低下する可能性があることも考慮しましょう。

まとめ

PythonでSwitch文の代替手段を活用し、効率的なプログラムを書く方法について紹介しました。

Pythonでは、Switch文がサポートされていないため、if-elif-else文や辞書を使って条件分岐をおこないましょう。

ただPython 3.10以降では、match文を使用してパターンマッチングも可能。

いろいろと手を動かしながら、一番良い方法を身につけてください。

基本的なプログラミングスキルを身につけたら、さらに深い知識を学ぶために公式ドキュメントやオンラインコースを活用しましょう。

これらを活用して、スキルをさらに向上させてください。

タイトルとURLをコピーしました