コンテンツ

Python速習ガイド - ステップ2 制御フロー (2) - 条件分岐 (2)

Info
  • 本講座は、Pythonプログラミングの基礎を手を動かしながら最速で身につけるための講座です。
  • 「スタイルガイド」では、Pythonできれいなコードを書くためのガイドライン(PEP8)で紹介されている内容を主に記載しています。
  • 各コードは実行して結果を確認することができます。
    ページの再読み込みで元の内容に戻りますので、自由にいじってみてください。

「ステップ2 制御フロー」の続きです。

評価結果がbool値(True, False)となる式のことを条件式といいます。
本項では、様々な条件式について見ていきます。

<=(以上)」のような2つの値を比較する記号のことを比較演算子といいます。
比較演算子を用いると「x <= 10」のような条件式を作成できます。

2つの値の順序を比較する演算子として、>, <, >=, <= の4種類があります。

比較演算子 意味
> より大きい
< より小さい
>= 以上
<= 以下

順序の比較は以下のように複数まとめて判定することもできます。

2つの値が等しいことを比較する演算子として、==, != の2種類があります。

比較演算子 意味
== 値が等しい
!= 値が等しくない
イコール演算子
「値が等しい」ことを比較する演算子は==(イコール2つ)です
代入に使う=(イコール1つ)と混同しないよう注意してください

上記のリストの例で、xyは値として等しいですが、オブジェクトとしては異なります。

id関数を用いると、そのオブジェクトのID(一意の識別子)を確認することができます。

上記のように、「値として等しい」ことと「オブジェクトとして等しい」ことは異なります。
「オブジェクトとして等しい」ことを比較する演算子として、is, is not があります。

比較演算子 意味
is オブジェクトとして同一
is not オブジェクトとして同一でない
スタイルガイド

is, is not による比較は ==, != による比較と比べて高速のため、
Noneのようなユニークなオブジェクトとの比較では is, is not を使用します。

基本的には以下のように使い分けましょう:

  • Noneとの比較: is, is not
  • True, False: 直接条件式として使用(比較演算子は通常不要)
  • それ以外との比較: ==, !=

一方の値がもう一方に含まれることの比較演算子として、in, not in があります。

比較演算子 意味
in 含まれる
not in 含まれない
📚練習問題

以下の条件を満たすプログラムを作成しましょう:

  1. 変数usernameに文字列「admin」を設定
  2. 変数passwordに文字列「secret123」を設定
  3. 変数attemptsに数値3を設定

以下の条件をチェックして結果を出力してください:

  • ユーザー名が「admin」かつパスワードが「secret123」の場合:「ログイン成功」
  • ユーザー名が「guest」の場合:「ゲストとしてログイン」
  • 試行回数が5回以上の場合:「アカウントロック」
  • それ以外の場合:「ログイン失敗」
解答例

条件式は 論理演算子 を用いて複数組み合わせることができます。

論理演算子 意味
and 両方の条件がTrueの場合のみTrueを返します
or いずれかの条件がTrueの場合にTrueを返します
not 条件の真偽を反転させます

複数の条件を組み合わせる場合は、括弧()を使って評価順序を明確にすると読みやすくなります。

論理演算子の評価順序は以下の通りです:

  1. notが最初に評価されます
  2. 次にandが評価されます
  3. 最後にorが評価されます
コラム:短絡評価

論理演算子andorは「短絡評価(short-circuit evaluation)」を行います。

  • andの場合: 最初の式がFalseの場合、結果は必ずFalseになるため、2つ目以降の式は評価されません
  • orの場合: 最初の式がTrueの場合、結果は必ずTrueになるため、2つ目以降の式は評価されません

これは効率的な評価のために重要な特性ですが、式の中で副作用(関数呼び出しなど)を期待している場合は注意が必要です。

条件分岐を用いた値の代入は、三項演算子(条件演算子)を使って1行で書くことができます。

  • 三項演算子の構文は次の通りです: <値1> if <条件> else <値2>
    • 条件がTrueの場合は値1が、Falseの場合は値2が結果となります
    • コードを簡潔に書けますが、複雑な条件では可読性が低下する場合があります
📚練習問題

以下のプログラムを三項演算子を使って書き換えましょう。

解答例

条件分岐では、条件式がbool型のTrueまたはFalseに評価されます。
bool型でない値を条件式に指定した場合は、bool関数を適用後のbool値として評価されます。

  • これまでに出てきた、Falseと評価される値は以下です:
    • False - ブール値のFalse
    • None - Noneオブジェクト
    • 0 - 整数の0
    • 0.0 - 浮動小数点の0
    • "" - 空文字列
    • [] - 空リスト
    • () - 空タプル
    • {} - 空辞書
    • set() - 空集合
  • それ以外の値は Trueと評価されます。

この仕様を利用すると、以下のように論理演算子を使って値の存在確認を簡潔に書くことができます:

ここまでのまとめ
  • 条件分岐はif, elif, elseを使って表現する
  • 条件式には比較演算子(>, <, >=, <=, ==, !=, is, is not, in, not in)を使う
  • 複数の条件は論理演算子(and, or, not)で組み合わせる
  • 簡単な条件分岐は三項演算子(<値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: 配送先(「東京」、「大阪」、「沖縄」、「離島」など)

最終的に「購入金額: ○○円、送料: ○○円、合計: ○○円」の形式で出力してください。

チャレンジ要素:

  1. 異なる値の組み合わせでテストしてみましょう
  2. 三項演算子を使って、一部の処理を簡潔に書けないか考えてみましょう
  3. in演算子を使って、特別地域の判定を効率的に行ってみましょう
解答例

次回は、制御フローの続きとして「ループ(繰り返し)」について学んでいきます。

関連記事