Pythonでswitch文を実現する方法:辞書とget()メソッドを使った実装ガイド
JavaやC#とは異なり、Pythonには組み込みのswitch文が存在しません。そのため、「switch…case」のような条件分岐を実現したい場合は、自分でコードを書いて同等の動作を再現する必要があります。
この記事では、Pythonで「switch…case」に相当する処理を書く方法を解説し、実際に動作するサンプルコードを2つ紹介します。記事を読み終える頃には、あなたのコードにも自信を持って疑似switch文を組み込めるようになっているでしょう。
switch文のおさらい
switch文とは、複数のコードブロックの中から1つを選択して実行するための構文です。プログラム内で複数の条件式を評価し、分岐処理を行う際に活用されます。
switch文の仕組みはシンプルです。まず評価対象の式を評価し、その結果を各「case」句の値と順番に比較します。一致するcaseが見つかれば、対応するコードブロックが実行されます。一致するものがなければ、何も実行されません。
また、どのcaseにも一致しなかった場合に実行するコードブロックを指定するための「default」キーワードを用意できる言語も多くあります。
Pythonでのswitch文の実装①:個別の値を返す
まずは、数値を曜日の文字列に変換するプログラムを作成してみましょう。
最初に、ユーザーに変換したい数値の入力を求めます。
convert_to_day = int(input("Insert a day of the week: "))
ここでは、ユーザーが入力した値をint()関数で整数に変換しています。この変換が必要な理由は後ほど説明します。
次に、曜日情報を格納する辞書(ディクショナリ)を定義します。この辞書には1週間のすべての曜日が含まれ、各キーには曜日を表す数値が、各値には書き下された曜日名(例:「Tuesday」)が格納されます。
days = {
1: "Monday",
2: "Tuesday",
3: "Wednesday",
4: "Thursday",
5: "Friday",
6: "Saturday",
7: "Sunday"
}
この辞書には7つのキーと7つの値が含まれています。キー「1」が「Monday」に対応し、以降、週の最終日まで同様に続きます。
続いて、辞書のget()メソッドを使って、ユーザーが入力した値に対応する項目を取得します。
day_as_written = days.get(convert_to_day, "There is no day with this numerical value.") print(day_as_written)
ユーザーの入力値を整数に変換したのは、get()メソッドの引数として使えるようにするためです。「convert_to_day」に格納された値と一致するキーが辞書に存在しない場合、get()メソッドの第2引数に指定したデフォルト値「There is no day with this numerical value.」が返されます。これは、switch文における「default」の役割に相当します。
例えば、ユーザーが「1」と入力した場合、コードは次のように評価されます。
days[1]
これにより、辞書からキー「1」に関連付けられた値が取得されます。
それでは、コードを実行して結果を確認してみましょう。
Insert a day of the week: 1 Monday
ユーザーが入力した数値が正しく文字列に変換されました。次に、辞書に存在しない曜日番号を入力した場合の動作も確認してみます。
Insert a day of the week: 8 There is no day with this numerical value.
無効な値が入力されても、エラーではなく適切なメッセージが表示されることがわかります。
Pythonでのswitch文の実装②:関数を呼び出す
同じ仕組みを使って、コード内の関数を呼び出すこともできます。今回は、サンドイッチ店の購入履歴リストに関する情報を表示するアプリケーションを作成してみましょう。
まず、購入金額のリストを定義します。
purchases = [2.50, 2.50, 2.75, 3.90, 5.60, 2.40]
次に、以下の3つを計算する関数を定義します。
- リスト内の購入件数
- 購入額の平均値
- 最大の購入額
それぞれの関数を定義していきましょう。
def number_of_purchases(): total = len(purchases) print(total) def average_value(): average = sum(purchases) / len(purchases) print(average) def largest_purchase(): largest = max(purchases) print(largest)
関数の定義が完了したら、いよいよ疑似switch文を書いていきます。最初の例と同様に、まずユーザーに値の入力を求めます。入力された値は、実行したい関数に対応している必要があります。
print("[1] Display the number of purchases made today")
print("[2] Display the average value of all the purchases made today")
print("[3] Display the largest purchase made today")
to_run = int(input("What would you like to do? "))
このコードは3つの選択肢を画面に表示し、ユーザーに実行したい操作の番号を入力させます。入力された値は整数に変換され、後の処理で利用できるようになります。
次に、数値と関数をマッピングする辞書を定義します。
options = {
1: number_of_purchases,
2: average_value,
3: largest_purchase
}
値「1」は「number_of_purchases」関数に、値「2」は「average_value」関数に、値「3」は「largest_purchase」関数にそれぞれマッピングされています。
続いて、get()メソッドを使って、プログラムが実行すべき関数を選択します。
function_to_execute = options.get(to_run) function_to_execute()
このコードは、辞書から実行したい関数を取得して呼び出します。ここでget()メソッドに第2引数(デフォルト値)を指定していないのは、返されるのが関数オブジェクトであり、呼び出し可能である必要があるためです。そのため、ユーザーが無効な値を入力するとエラーが発生します。この挙動への対処方法はいくつかありますが、詳細は本チュートリアルの範囲外となります。
それでは、コードを実行してみましょう。
[1] Display the number of purchases made today [2] Display the average value of all the purchases made today [3] Display the largest purchase made today What would you like to do? 3 5.6
選択肢3を選ぶと、その日の最大の購入額が正しく表示されました。今度は選択肢2を試してみます。
[1] Display the number of purchases made today [2] Display the average value of all the purchases made today [3] Display the largest purchase made today What would you like to do? 2 3.275
リスト内の購入額の平均値が正しく返されています。
補足:Python 3.10以降ならmatch文が使える
なお、Python 3.10以降では、他言語のswitch文に相当する「match文」(構造的パターンマッチング)が標準機能として導入されました。match文を使えば、以下のように記述できます。
match convert_to_day:
case 1:
print("Monday")
case 2:
print("Tuesday")
case _:
print("There is no day with this numerical value.")
「case _」はdefaultに相当します。ただし、古いバージョンのPythonとの互換性が必要な場合や、辞書ベースのアプローチの方が柔軟なケースもあるため、両方の手法を理解しておくと便利です。
まとめ
Pythonには組み込みのswitch文はありませんが、辞書とget()メソッドを組み合わせることで、簡単に同等の処理を実現できます。
switch文のような条件分岐は、1つの式を複数の候補値と比較して処理を振り分けたい場合に非常に有用です。
具体的には、指定したキーに応じて辞書から値を取得するパターンと、特定のキーを参照して辞書から関数を取得・実行するパターンの2つがあります。
これであなたも、プロの開発者のようにPythonでswitch文相当の処理を自作できるはずです。ぜひ自分のコードでも試してみてください。
-
PythonでHello Worldを表示する方法:初心者向けステップバイステップガイド
Pythonの「Hello World」プログラムは、多くのプログラマーが最初に書くプログラムです。print文を使って文字列をコンソールに表示するだけのシンプルなもので、コードは print(Hello World) の1行のみです。 Pythonが正しくインストールされているかを確認するには、まず「Hello World」を書いてみるのがおすすめです。作成方法は主に2つあります。ターミナル(コマンドライン)を使う方法と、Visual Studio CodeやVimなどのコードエディタを使う方法です。 始める前に、お使いのマシンにPython 3がインストールされていることを確認しておき
-
SQLのWHERE句とは?基本構文からSELECT・UPDATE・DELETEでの使い方まで徹底解説
SQLのWHERE句は、コマンドが返す、または操作対象とするレコードの数を絞り込むために使われる句です。SELECT、UPDATE、DELETEなどのステートメントと組み合わせて使用し、ANDキーワードを使えば、複数の条件を満たすレコードだけを対象にすることもできます。 例えば、「営業マネージャーの社員一覧を取得したい」「特定の日付以降に入社した従業員を調べたい」といった場面では、クエリの結果を特定の条件でフィルタリングする必要があります。 このようなときに活躍するのがWHERE句です。本記事では、WHERE句を使ってSQLでレコードを絞り込む方法を、基本構文から実践的な例まで詳しく解説し