Pythonインタラクティブガイド - ステップ2 制御フロー (2) - 条件分岐 (2): 条件式, 三項演算子
- 本講座「Pythonインタラクティブガイド」は、手を動かしながらPythonプログラミングの基礎を学べる実践的な入門講座です。
- 「スタイルガイド」では、Pythonで読みやすくきれいなコードを書くためのガイドライン(PEP8)を主に紹介しています。
- 各コード例はその場で実行して結果を確認できます。
ページ再読み込みで元に戻るので、自由に試してみてください。
「ステップ2 制御フロー」の続きです。
2.1. 条件分岐
2.1.5. 条件式
評価結果がbool値(True, False)となる式のことを条件式といいます。
本項では、様々な条件式について見ていきます。
比較演算子
「<=(以上)」のような2つの値を比較する記号のことを比較演算子といいます。
比較演算子を用いると「x <= 10」のような条件式を作成できます。
順序の比較
2つの値の順序を比較する演算子として、>, <, >=, <= の4種類があります。
| 比較演算子 | 意味 |
|---|---|
> |
より大きい |
< |
より小さい |
>= |
以上 |
<= |
以下 |
順序の比較は以下のように複数まとめて判定することもできます。
値が等しいことの比較
2つの値が等しいことを比較する演算子として、==, != の2種類があります。
| 比較演算子 | 意味 |
|---|---|
== |
値が等しい |
!= |
値が等しくない |
==(イコール2つ)です代入に使う
=(イコール1つ)と混同しないよう注意してくださいオブジェクトとして同一であることの比較
上記のリストの例で、xとyは値として等しいですが、オブジェクトとしては異なります。
id関数を用いると、そのオブジェクトのID(一意の識別子)を確認することができます。
上記のように、「値として等しい」ことと「オブジェクトとして等しい」ことは異なります。
「オブジェクトとして等しい」ことを比較する演算子として、is, is not があります。
| 比較演算子 | 意味 |
|---|---|
is |
オブジェクトとして同一 |
is not |
オブジェクトとして同一でない |
is, is not による比較は ==, != による比較と比べて高速のため、
Noneのようなユニークなオブジェクトとの比較では is, is not を使用します。
基本的には以下のように使い分けましょう:
Noneとの比較:is,is notTrue,False: 直接条件式として使用(比較演算子は通常不要)- それ以外との比較:
==,!=
含まれることの比較
一方の値がもう一方に含まれることの比較演算子として、in, not in があります。
| 比較演算子 | 意味 |
|---|---|
in |
含まれる |
not in |
含まれない |
論理演算子
条件式は 論理演算子 を用いて複数組み合わせることができます。
| 論理演算子 | 意味 |
|---|---|
and |
両方の条件がTrueの場合のみTrueを返します |
or |
いずれかの条件がTrueの場合にTrueを返します |
not |
条件の真偽を反転させます |
複数の条件を組み合わせる場合は、括弧()を使って評価順序を明確にすると読みやすくなります。
論理演算子の評価順序は以下の通りです:
notが最初に評価されます- 次に
andが評価されます - 最後に
orが評価されます
論理演算子andとorは「短絡評価(short-circuit evaluation)」を行います。
andの場合: 最初の式がFalseの場合、結果は必ずFalseになるため、2つ目以降の式は評価されませんorの場合: 最初の式がTrueの場合、結果は必ずTrueになるため、2つ目以降の式は評価されません
これは効率的な評価のために重要な特性ですが、式の中で副作用(関数呼び出しなど)を期待している場合は注意が必要です。
以下の条件を満たすプログラムを作成しましょう:
- 変数
usernameに文字列「admin」を設定 - 変数
passwordに文字列「secret123」を設定 - 変数
attemptsに数値3を設定
以下の条件をチェックして結果を出力してください:
- ユーザー名が「admin」かつパスワードが「secret123」の場合:「ログイン成功」
- ユーザー名が「guest」の場合:「ゲストとしてログイン」
- 試行回数が5回以上の場合:「アカウントロック」
- それ以外の場合:「ログイン失敗」
解答例
型の判定 (isinstance関数)
isinstance関数を使うと、ある値が特定の型かどうかを判定できます。
| 型チェック | 説明 |
|---|---|
isinstance(値, 型) |
値が指定した型かどうかを判定する |
タプルを使用して、複数の型を指定することも可能です:
年齢の判定を行う、以下のプログラムを作成しましょう:
- 変数
ageに値を設定 ageが以下条件を満たす場合に、「あなたはage歳です」と出力するageの条件:- 整数
0以上130以下
- 条件を満たさない場合に、「入力値が不正です」と出力する
解答例
2.1.6. 三項演算子
条件分岐を用いた値の代入は、三項演算子(条件演算子)を使って1行で書くことができます。
- 三項演算子の構文は次の通りです:
<値1> if <条件> else <値2>- 条件が
Trueの場合は値1が、Falseの場合は値2が結果となります - コードを簡潔に書けますが、複雑な条件では可読性が低下する場合があります
- 条件が
以下のプログラムを三項演算子を使って書き換えましょう。
解答例
2.1.7. 条件として評価される値
条件分岐では、条件式がbool型のTrueまたはFalseに評価されます。
bool型でない値を条件式に指定した場合は、bool関数を適用後のbool値として評価されます。
- これまでに出てきた、
Falseと評価される値は以下です:False- ブール値のFalseNone- Noneオブジェクト0- 整数の00.0- 浮動小数点の0""- 空文字列[]- 空リスト()- 空タプル{}- 空辞書set()- 空集合
- それ以外の値は
Trueと評価されます。
この仕様を利用すると、以下のように論理演算子を使って値の存在確認を簡潔に書くことができます:
- 条件分岐は
if,elif,elseを使って表現する - 条件式には比較演算子(
>,<,>=,<=,==,!=,is,is not,in,not in)を使う - 複数の条件は論理演算子(
and,or,not)で組み合わせる isinstance関数を用いると型のチェックができる- 簡単な条件分岐は三項演算子(
<値1> if <条件> else <値2>)で表現できる - Pythonでは様々な値が真偽値として評価される
オンラインショッピングサイトの送料計算システムを作成しましょう。
以下の仕様に従って、送料を計算するプログラムを作成してください:
基本送料ルール:
- 購入金額が5,000円以上:送料無料
- 購入金額が3,000円以上5,000円未満:送料300円
- 購入金額が3,000円未満:送料500円
特別条件:
- プレミアム会員は下記条件に関わらず常に送料無料
- 商品カテゴリが「本」の場合:送料一律200円
- 配送先が「沖縄」または「離島」の場合:上記送料に追加で500円
変数設定:
purchase_amount: 購入金額is_premium: プレミアム会員かどうか(True/False)category: 商品カテゴリ(「本」、「家電」、「衣類」など)destination: 配送先(「東京」、「大阪」、「沖縄」、「離島」など)
最終的に「購入金額: ○○円、送料: ○○円、合計: ○○円」の形式で出力してください。
チャレンジ要素:
- 異なる値の組み合わせでテストしてみましょう
- 三項演算子を使って、一部の処理を簡潔に書けないか考えてみましょう
in演算子を使って、特別地域の判定を効率的に行ってみましょう
解答例
次回は、制御フローの続きとして「ループ(繰り返し)」について学んでいきます。