Python速習ガイド - ステップ2 制御フロー (2) - 条件分岐 (2)
- 本講座は、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 not
True
,False
: 直接条件式として使用(比較演算子は通常不要)- それ以外との比較:
==
,!=
含まれることの比較
一方の値がもう一方に含まれることの比較演算子として、in
, not in
があります。
比較演算子 | 意味 |
---|---|
in |
含まれる |
not in |
含まれない |
以下の条件を満たすプログラムを作成しましょう:
- 変数
username
に文字列「admin」を設定 - 変数
password
に文字列「secret123」を設定 - 変数
attempts
に数値3を設定
以下の条件をチェックして結果を出力してください:
- ユーザー名が「admin」かつパスワードが「secret123」の場合:「ログイン成功」
- ユーザー名が「guest」の場合:「ゲストとしてログイン」
- 試行回数が5回以上の場合:「アカウントロック」
- それ以外の場合:「ログイン失敗」
解答例
論理演算子
条件式は 論理演算子 を用いて複数組み合わせることができます。
論理演算子 | 意味 |
---|---|
and |
両方の条件がTrue の場合のみTrue を返します |
or |
いずれかの条件がTrue の場合にTrue を返します |
not |
条件の真偽を反転させます |
複数の条件を組み合わせる場合は、括弧()
を使って評価順序を明確にすると読みやすくなります。
論理演算子の評価順序は以下の通りです:
not
が最初に評価されます- 次に
and
が評価されます - 最後に
or
が評価されます
論理演算子and
とor
は「短絡評価(short-circuit evaluation)」を行います。
and
の場合: 最初の式がFalse
の場合、結果は必ずFalse
になるため、2つ目以降の式は評価されませんor
の場合: 最初の式がTrue
の場合、結果は必ずTrue
になるため、2つ目以降の式は評価されません
これは効率的な評価のために重要な特性ですが、式の中で副作用(関数呼び出しなど)を期待している場合は注意が必要です。
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
)で組み合わせる - 簡単な条件分岐は三項演算子(
<値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
演算子を使って、特別地域の判定を効率的に行ってみましょう
解答例
次回は、制御フローの続きとして「ループ(繰り返し)」について学んでいきます。