Python で switch-case 構造を実装したいですか?スイッチケースの動作をエミュレートするために使用できるさまざまなアプローチを学びます。
C または JavaScript でプログラミングしたことがある場合は、switch-case ステートメントを使用したことがあるでしょう。しかし、なぜ switch-case 構造が必要なのでしょうか?
一連の異なるアクション (またはコード ブロック) があるとします。また 、 実行するアクション (実行するコード ブロック) は、変数または式の値によって異なります。
例としては次のようなものがあります。
- スコアに基づいて学生に成績を割り当てる
- ユーザーの選択に基づいて文字列操作手法を選択する
- ユーザー入力に応じて 2 つの数値に対して算術演算を実行する
したがって、switch-case 構造は、そのようなロジックを実装する便利な方法を提供します。変数または式の値に基づいて、多くの可能なアクションのうちの 1 つを実行する必要がある場合。
Python には組み込みの switch-case 構造はありませんが、同様の機能を実現するために使用できるアプローチがいくつかあります。この記事では、これらのアプローチについて説明します。
Python でのスイッチケース動作のエミュレーション
例を挙げて、Python でスイッチケースの動作をエミュレートする方法を見てみましょう。
次のことを行う簡単なプログラムを作成します。
- 単語のリストからランダムに単語 (Python 文字列) をサンプリングします。
- コンテキストを提供し、ユーザーにプロンプトを表示します。選択した単語に対して実行する文字列操作 (文字列操作) を定義します。
- デフォルトの動作を含む、大文字と小文字の変更 (小文字、大文字、タイトルケースなど) の操作を考慮します。必要に応じて、組み込みの Python 文字列メソッドを使用します。
- ユーザーに入力を求めます。デフォルトでは入力は文字列であるため、型キャストによって int に変換します。
Python 文字列は 不変 です。したがって、文字列メソッドは元の文字列を変更しません。むしろ、必要な変更を加えた文字列のコピーを返します。使用する Python 文字列メソッドを確認してみましょう。
| 文字列メソッド | 説明 |
|---|---|
lower()
|
すべての文字が小文字である文字列のコピーを返します。 |
upper()
|
すべての文字が大文字である文字列のコピーを返します。 |
title()
|
タイトルケースでフォーマットされた文字列のコピーを返します。 |
swapcase()
|
小文字と大文字をそれぞれ大文字と小文字に変換した文字列のコピーを返します。 |
次のコード スニペットは、
word_list
から単語をランダムにサンプリングし、ユーザー入力を取得します。
import random
# List of words to choose from
word_list = ["Python", "programming", "Hello", "world", "context", "Switch"]
# Randomly select a word from the list
word = random.choice(word_list)
# Provide context and available options to the user
print("Welcome! You have a randomly selected word.")
print("Choose an option to manipulate the word:")
print("1. Lowercase")
print("2. Uppercase")
print("3. Titlecase")
print("4. Swapcase")
print("5. Default behavior")
# Get user option
option = int(input("Enter your option: "))
ユーザーの選択に基づいて文字列「Python」がどのように変更されるかを示す例を次に示します。
プログラムを実行すると、次のように入力を求めるプロンプトが表示されます。
Welcome! You have a randomly selected word.
Choose an option to manipulate the word:
1. Lowercase
2. Uppercase
3. Titlecase
4. Swapcase
5. Default behavior
Enter your option:
次に、さまざまなアプローチの実装に進みましょう。
If-Elif-Else ラダーの使用
このアプローチでは、一連の if-elif-else ステートメントを使用して、ユーザーの選択を事前定義されたオプションと照合します。次に、ユーザーの入力に基づいて、対応するコード ブロックを実行します。
# if-elif-else
if option == 1:
result = word.lower()
elif option == 2:
result = word.upper()
elif option == 3:
result = word.title()
elif option == 4:
result = word.swapcase()
else:
result = word
print(f"Your random word is {word} and the result is {result}")
ここ:
- if-elif ステートメントを使用して、ユーザーの入力と各オプションを比較します。
- 一致するものが見つかると、対応するコード ブロックが実行されます。
- if-elif 条件がどれも一致しない場合は、デフォルトの動作として else ブロックが実行されます。
ここでスクリプトを実行し、選択肢を入力して、出力を確認できます。
Welcome! You have a randomly selected word
Choose an option to manipulate the word:
1. Lowercase
2. Uppercase
3. Titlecase
4. Swapcase
5. Default behavior
Enter your option: 2
Your random word is Switch and the result is SWITCH.
if-elif-else ラダーは実装が簡単です。しかし、それを維持するのは難しいかもしれません。この例では、5 つのケースがありました (デフォルトの動作を含む)。しかし実際には、さらに多くのケースがあるかもしれません。このような長い if-elif-else はしごは、 コードの臭い がするので避けるべきです。
それでは、保守可能な実装に進みましょう。
ディクショナリ マッピングとファーストクラス関数の使用
Python の辞書 と 関数 を利用して、スイッチケースの動作をエミュレートできます。
📑 Python 関数は第一級市民です
Python では、関数は第一級市民です。関数を定義して呼び出すだけではなく、さらに多くのことを行うことができます。
- 関数を定義したら、その関数を別の変数に代入したり、リストの要素や辞書の値などとして関数を使用したりできます。
- 関数を渡すこともできます。関数は引数として他の関数に渡すことができ、関数は関数を返すことができます。
このアプローチでは、辞書を使用して、ユーザーの選択を対応する機能またはアクションにマッピングします。これは、if-elif ステートメントの長いチェーンを回避するため、複数の選択肢を処理するより効率的な方法です。
まず、さまざまな文字列操作用に次の関数を定義しましょう。
# Define functions for each option
def lower_case(word):
return word.lower()
def upper_case(word):
return word.upper()
def title_case(word):
return word.title()
def swap_case(word):
return word.swapcase()
次に、次のことを実行してみましょう。
-
キーがユーザーの選択、値が実行する機能またはアクションである、
choicesという辞書を作成します。 -
辞書メソッド
get()を使用して、ユーザーの選択に基づいて選択されたアクションを取得します。選択肢が辞書に 見つからない 場合は、ラムダ関数で指定されたデフォルトのアクションが提供されます。 - 次に、ランダムな単語に対して選択したアクションを実行します。
# Store functions in a dictionary
options = {
1: lower_case,
2: upper_case,
3: title_case,
4: swap_case,
}
# Use the dictionary to select and call the appropriate function
result = options.get(option, lambda x: x)(word)
print(f"Your random word is {word} and the result is {result}")
出力例を次に示します。
Welcome! You have a randomly selected word.
Choose an option to manipulate the word:
1. Lowercase
2. Uppercase
3. Titlecase
4. Swapcase
5. Default behavior
Enter your option: 4
Your random word is Hello and the result is hELLO.
大文字と小文字の区別の使用
📝 注 : match-case ステートメントを使用するには、Python 3.10 以降のバージョンが必要です。
Python 3.10 以降では、
match
ステートメントを使用して switch-case のような構造を実装できます。シンプルな構文を備えた
match
ステートメントは、複数のケースを処理するためのより直感的な方法を提供します。
_
(アンダースコア) はデフォルトのケースとして機能します。
match-case
を使用して例を書き直す方法は次のとおりです。
-
matchステートメントを使用して、ユーザーの入力をさまざまなケースと比較します。 - それぞれのケースでは、選択肢と、その選択肢が一致した場合に実行するコードを指定します。
-
_(アンダースコア) はデフォルトのケースとして機能し、他のケースがどれも一致しない場合にコードを実行します。
match option:
case 1:
result = word.lower()
case 2:
result = word.upper()
case 3:
result = word.title()
case 4:
result = word.swapcase()
case _:
result = word # Default behavior, return the string as is
print(f"Your random word is {word} and the result is {result}.")
これで、スクリプトを実行して出力を確認できるようになります。
Welcome! You have a randomly selected word.
Choose an option to manipulate the word:
1. Lowercase
2. Uppercase
3. Titlecase
4. Swapcase
5. Default behavior
Enter your option: 2
Your random word is world and the result is WORLD.
⚙
matchステートメントは switch-case 構造を実装する便利な方法を提供しますが、switch-case の動作をエミュレートすることを超えた、より役立つ 構造パターン マッチング タスクを目的としています。
まとめ
Python でスイッチケース機能を実現するためのさまざまなアプローチをまとめてみましょう。
- if-elif-else はしごは実装が簡単ですが、維持するのが面倒です。したがって、チェックするオプションがあまりない場合にのみ、これらの使用は最小限に抑えてください。
- Python の辞書と関数を利用して、スイッチケースの動作をエミュレートできます。さまざまな選択肢と対応する関数をそれぞれ辞書のキーと値として含めます。
- Python 3.10 で導入された match-case ステートメントは、この switch-case 構造をシンプルで直感的な構文で実装するのに役立ちます。ただし、match-case ステートメントは、より興味深い構造パターン マッチングの使用例には最適です。
このチュートリアルのコード例は GitHub にあります。コーディング面接の準備をしている場合は、Python 面接でよくある質問をまとめたこのまとめをご覧ください。






![2021 年に Raspberry Pi Web サーバーをセットアップする方法 [ガイド]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)





