パソナについて
記事検索

Pythonではswitchやcaseがない!代わりに使える方法とは

Pythonにはif文で充分対処できるとして、switch文は実装されていません。そこで今回は、switchの代わりに使える条件分岐と処理の書き方について解説していきます。

Pythonではswitchやcaseがない!代わりに使える方法とは

Pythonにはif文で充分対処できるとして、switch文は実装されていません。そこで今回は、switchの代わりに使える条件分岐と処理の書き方について解説していきます。

スキルアップ

2023/02/22 UP

プログラミングには必須とも言える条件分岐の一つに、switch文があります。switchはいくつかの条件によって処理を分岐させ、異なる処理を行なう場合に使用する条件分岐の方法で、多くのプログラミング言語に実装されています。

しかしPythonにはif文で充分対処できるとして、switch文は実装されていません。そこで今回は、switchの代わりに使える条件分岐と処理の書き方について解説していきます。

Pythonにswitch文はない!

Pythonにはswitch文が実装されていません。その理由として、公式ドキュメントでは「if...elif...else」文で同じ処理ができるため、switch文を採用していないと解説しています。

Pythonでも、switch文を採用する場合の構文に関する提案は複数ありましたが、未だ合意が得られていません。そのため、Pythonでは現時点ではswitch文を実装せず、代わりにif...elif...else文で条件分岐を記述するか、もしくはdictionary(辞書)を使用する方法を採用しています。

if...elif...elseは比較的少ない選択肢に、辞書は非常に大きな数の選択肢から選ぶ時に主に使用されています。

なお、switch文の代わりとなるif文の書き方については、こちらの記事も併せてご確認ください。
【Python入門】if文で条件分岐する書き方をサンプルコードと併せて解説

Pythonでswitchにかわりになるものとは

前項で解説したとおり、Pythonではif文がswitch文と同じ処理が可能であることを理由にswitch文が実装されていません。公式ドキュメントでは、Pythonにおける条件分岐はif文で記述することが推奨されています。

実際にサンプルコードを実行しながら、switch文の代わりになる記述方法を見ていきましょう。

if文を使う

Pythonではswitch文を実装しない理由として、if...elif...else文で同じ処理が可能であることを挙げています。そこでif文で実際に複数の条件分岐を持つコードを記述してみましょう。

次のサンプルコードでは、入力された値を評価し、4つの条件に分岐しています。このサンプルではまず、inputの入力値をstr型からint型に変換し、ifから順に条件式を評価しています。ifでは変数valueが0であった場合、「無料です」と表示する処理を実行します。以降、elifを順に評価し、すべての条件式がfalseだった場合、elseの処理を実行します。

このように、if文でswitch文の機能を表現する場合、複数の行に渡ってelifを追加して記述します。

value = input('0から1000の価格を入力してください')
value = int(value)
if value == 0:
    print('無料です')
elif value <= 200:
    print('安いです')
elif value <= 800:
    print('普通です')
else:
    print('高いです') 

また、if文では文字列に対しても条件式による比較を行なえます。次のサンプルコードでは、inputに入力した文字列に対して条件式で比較を行ない、異なる文字列を表示する処理を実行しています。

aisatsu = input("あいさつをしましょう。今の時間はおはよう?こんにちは?こんばんは?")

if aisatsu == "おはよう":
    print("おはようございます、良い朝ですね。")
elif aisatsu == "こんにちは":
    print("こんにちは、もうお昼です。")
elif aisatsu == "こんばんは":
    print("こんばんは、良い夜ですね。")
else:
    print("今の時間に合うあいさつをしましょう")

Pythonのdictionary(辞書)を使う

dictionary(辞書)を使用する方法は、条件分岐が多い場合にif...elif...else文ではコードが読みにくくなるケースでも、dictionaryによって可読性が高くなるというメリットがあります。

dictionaryを使用した条件分岐の記述方法は、いくつか種類があります。一つ目のサンプルコードを見ていきましょう。このサンプルコードでは、入力された値を参照し、辞書にある数字であれば対応する文字列を呼び出して、結果を表示する処理を行なっています。

if...elif...else文で記述すると5つの条件の数だけ条件式と処理を記述する必要がありますが、辞書を使用した場合は短い記述で同じ処理が行なえます。

numbers = input('1から5を入力してください')
numbers = int(numbers)

omikuji = {1:"吉", 2:"凶", 3:"大吉", 4:"小吉", 5:"中吉"}

if numbers in omikuji:
    kuji = omikuji[numbers]
    print(kuji)
else:
    print("エラー")

では、二つ目のサンプルコードを見てみましょう。このサンプルコードでは、辞書に品名と価格を格納しておき、itemのinputで入力された品名をもとに辞書から価格の値を読み出して表示しています。

values = {
    'りんご' : '150',
    'バナナ' : '30',
    'みかん' : '20',
}
item = input('りんごですか、バナナですか、みかんですか?')
print(item + 'の価格は' + values[item] + '円です')

このようにswitchを使う代わりに、辞書に必要なデータを格納しておき、inputなどで入力された値をもとに辞書へアクセスしてデータを読み出すのが辞書の使い方です。

Pythonではif...else文やdictionaryでswitchを表現しよう

Pythonではif...else文やdictionaryでswitchを表現しよう

Pythonはswitch文をサポートしていませんが、代わりにif...elif..elseで記述します。また、より簡潔な書き方として辞書を使用した記述方法もあります。どちらも他のプログラミング言語におけるswitch文と同じ処理を実行できるため、switch文はありませんがコーディングには問題はありません。

結果は同じ処理になりますが、switchがないため記述の仕方や処理の方法が他のプログラミング言語とは異なります。条件分岐はプログラムのアルゴリズムを作る上で非常に重要な要素であるため、実際にサンプルコードを実行しながら自分でも条件分岐を記述し、マスターしておきましょう。