Python 三項演算子の使用方法
公開: 2023-01-04このガイドでは、Python で三項演算子を使用する方法について説明します。 構文を学び、いくつかの例をコーディングして、それがどのように機能するかを理解します。
まず、if-else 条件ステートメントのしくみを確認してから、三項演算子を使用して同等の式を記述する方法を学習します。
次に、いくつかの例をコーディングしてから、Python のタプルと辞書を使用して Python の三項演算子の動作をエミュレートする方法を学びます。 最後に、三項演算子の使用を好む場合のいくつかの使用例を確認します。
さぁ、始めよう!
Python の If-Else ステートメント: レビュー
Python REPL を開始するか、Geekflare のオンライン Python エディターでコードを作成できます。
Python の if-else ステートメントの一般的な構文は次のとおりです。
if condition: # do this else: # do this
上記のスニペットでは、 condition
はチェックする条件を示します。 条件がTrue
と評価された場合、if ブロックがトリガーされます。 条件がFalse
と評価された場合、else ブロック内のステートメントが実行されます。
これは、 energy
の値がゼロ以下かどうかに応じて、 game_over
変数にブール値が割り当てられる例です。
-
energy <= 0
の場合、game_over
はTrue
です。 - それ以外の場合、
game_over
は False です。
次のコード スニペットは、if-else 条件ステートメントを使用してこれを行う方法を示しています。
energy = -1 if energy <= 0: game_over = True else: game_over = False print(game_over) # True
この例では、 energy
は 0 より小さい -1 です。したがって、 game_over
は True です。
Python 三項演算子: 構文と例
Python には、C や C++ などの言語の三項条件演算子とよく似た働きをする三項演算子があります。 それを使用するための一般的な構文は次のとおりです。
expression1 if condition else expression2
上記の構文を解析してみましょう。
-
condition
: チェックする条件。 -
expression1
: 条件が True かどうかを評価する式。 -
expression2
: 条件が False であるかどうかを評価する式。
ここで、 if-else バージョンのコードから、 expression1
、 expression2
、およびcondition
を特定します。
すべてをまとめると、Python の三項演算子を使用して次のようになります。
game_over = True if energy <= 0 else False print(game_over) # True
別の例をコーディングしましょう。 あなたが書店を経営していて、読者が過去 1 年間にあなたの店を訪れた頻度に応じて、読者に割引を提供するとします。
numVisits
が訪問数を表すとします。
-
numVisits > 7
の場合、割引率、discount_perc
は 20 です。 - それ以外の場合、
discount_perc
は 5 です。
三項演算子を使用して、 discount_perc
変数に値を割り当てます。
numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # 20 (as numVisits = 10 which is > 7)
次に、Python タプルと辞書を使用して三項演算子をエミュレートする方法を学びます。
Python Tuple を使用した三項演算子のエミュレート
Python のすべてのイテラブルと同様に、タプルはゼロ インデックスに従います。 したがって、タプルに 2 つの要素がある場合、 tuple_name[0]
はタプルの最初の要素を示し、 tuple_name[1]
はタプルの 2 番目の要素を示します。
Python の基本的なデータ型は、integer、float、string、および Boolean です。 Python は型キャストをサポートしており、特定のデータ型を別のデータ型での同等の表現で表すことができます。
Python REPL を開始し、次の例を実行します。 整数をブール値に変換しようとすると、次のことがわかります。
-
bool(0)
はFalse
です。 -
bool(<any non-zero integer>)
はTrue
を返します。
>>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True
同様に、ブール値を整数にキャストすると、次のようになります。
>>> int(True) 1 >>> int(False) 0
型キャストとインデックス作成をまとめると、次のように実行できます。
- タプルのインデックス 0 の要素:
condition
がFalse
の場合に使用される値。 - タプルのインデックス 1 の要素:
condition
がTrue
の場合に使用される値。
上記を使用すると、次のようになります。
>>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20
ここでは、 numVisits
が 10 であるため、条件numVisits > 7
はTrue
です。int int(True)
が 1 であるため、 discount_perc
の値は 20 であり、インデックス 1 の要素です。
Python Dictionary を使用した三項演算子のエミュレート
True
とFalse
を辞書のキーとして設定できます。 また、 expression1
1 とexpression2
2 をそれぞれキーTrue
とFalse
に対応する値として設定できます。
some_dict = {True: expression1, False: expression2 }
次に何をしますか? some_dict[condition]
を使用すると、 condition
がTrue
の場合、 True
キーに対応するexpression1
が評価されます。 また、 condition
がFalse
の場合、 expression2
が評価されます。
discount_perc
の例を (再び) コーディングしてみましょう。ただし、今回は Python 辞書を使用します。
>>> numVisits = 10 >>> discount_dict = {True: 20, False:5} >>> discount_perc = discount_dict[numVisits > 7] >>> discount_perc # 20
ここでは、 numVisits = 10
であり、7 より大きいため、条件numVisits > 7
はTrue
です。 したがって、 discount_dict[numVisits > 7]
は、値 20 であるdiscount_dict[True]
に評価されます。
常に Python 三項演算子を使用する必要がありますか?
ここまでで、三項演算子の使い方を学びました。 しかし、常に三項演算子を使用する必要がありますか? まあ、三項演算子はすべてのユースケースに最適な選択ではないかもしれません。 このセクションは、if-else ステートメントよりも三項演算子の使用を優先する必要がある場合に分割されます。 また、三項演算子の代わりに if-else ステートメントの使用を検討すべき場合についても説明します。
If-Else ブロックよりも簡潔
前述のように、Python では、三項演算子式は if-else ステートメントよりも簡潔です。 したがって、これを使用して条件をチェックし、その場で条件付きで式を評価できます。
次の例では、 nums
はランダムに生成された 100 個の整数のリストです。 100 個の数字のそれぞれについて、奇数か偶数かをチェックします。 そして、この評価は f-string 内でインラインで行われます。
import random nums = [random.choice(range(100)) for i in range(10)] for num in nums: print(f"{num} is {'even' if num%2==0 else 'odd'}")
# sample output 0 is even 56 is even 6 is even 53 is odd 62 is even 7 is odd 8 is even 77 is odd 41 is odd 94 is even
三項演算子には Else 句が必要です
if-else 条件ステートメントを使用している場合、else 句はオプションです。 例を見てみましょう。 energy
がゼロ以下の値に低下した場合、 game_over
変数はTrue
に設定されます。
ただし、 energy
がゼロより大きい場合、 game_over
変数は初期化されません。 したがって、 game_over
変数にアクセスしようとすると、エラーが発生します。
energy = 5 if energy <= 0: game_over = True print(f"Is the game over? {game_over}")
Traceback (most recent call last): File "ternary_op.py", line 39, in <module> print(f"Is the game over? {game_over}") NameError: name 'game_over' is not defined
これを修正する 1 つの方法は、最初にgame_over
をFalse
に設定し、エネルギー レベルがゼロ以下の場合はTrue
に更新することです。
energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"Is the game over? {game_over}")
ただし、上記と同等の Python 三項演算子を使用する場合、else 句はオプションではありません。 三項演算子では、 condition
がFalse
の場合に式を評価する必要があります。
game_over = True if energy <= 0 else False
上記を、else 部分を削除してgame_over = True if energy <= 0
に変更すると、次のように構文エラーが発生します。
File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax
複数の条件を確認するには、If-Else ステートメントを使用します
例を考えてみましょう: 一連のコーディング インタビューの質問のすべての質問には、関連付けられた難易度スコアがあります。 このスコアに応じて、簡単、中、難しいの 3 つの難易度レベルのいずれかを特定の問題に割り当てます。 以下があるとします。
スコア | 難易度 |
10未満 | 簡単 |
10 から 20 の間 | 中くらい |
20以上 | 難しい |
難易度スコアが与えられると、次のように Python 三項演算子を使用して難易度を取得できます。
score = 12 difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium" print(difficulty_level) # medium
上記のコード ブロックの三項演算子式は、次の形式です。
expression1 if condition1 else expression2 if condition2 else expression3
簡潔ですが、読んで解析するのは少し難しいです。 次の図は、この場合に制御フローがどのように発生するかを示しています。
次のコード スニペットは、if-else ステートメントを使用した同等の実装を示しています。 ご覧のとおり、制御フローははるかに理解しやすく、コードはより読みやすくなっています。
if score < 10: difficulty_level="easy" elif score > 20: difficulty_level="hard" else: difficulty_level="medium" print(difficulty_level)
したがって、複数の条件がある場合は、三項演算子の代わりに if-else ブロックを使用する必要があります。 これにより、コードが読みやすく、理解しやすくなります。
また、条件が true か false かに応じて複数のステートメントを実行する必要がある場合は、if-else ステートメントの使用を検討する必要があります。
結論
このチュートリアルで学んだことの要約を次に示します。
- Python では、次の構文で三項演算子を使用でき
expression1 if condition else expression2
。 - Python のタプルと辞書を使用して、三項演算子の動作をエミュレートできます。
- 三項演算子は if-else ブロックのより簡潔な代替手段になる可能性がありますが、コードが読みやすいことを確認する必要があります。 コードの読みやすさを向上させるために、特に複数の条件をチェーンする必要がある場合は、三項演算子の代わりに if-else ステートメントを使用できます。
次に、Python の等値演算子と非等値演算子に関するチュートリアルを確認してください。