初めてのPython(12章)
条件分岐のifステートメント
構文、多分岐
if ~ elif ~ elseを使う。else ifじゃないので注意が必要。
if <条件1>: 処理1 elif <条件2>: 処理2 else: 処理3
多分岐(switch)に該当するステートメントは存在しないので、elifをいっぱい並べて実現。
条件判定が固定であれば、ディクショナリをつかって多分岐を実現可能
(has_key()を使う - if文が必要?)
>>> dict = {'spam':1, 'ham':2, 'bacon':0} >>> ingredient = 'ham' >>> if dict.has_key(ingredient): ... print "%d %s in fridge" % (dict[ingredient], ingredient) ... else: ... print "No %s in fridge" % (ingredient) ... 2 ham in fridge >>> ingredient = 'egg' >>> if dict.has_key(ingredient): ... print "%d %s in fridge" % (dict[ingredient], ingredient) ... else: ... print "No %s in fridge" % (ingredient) ... No egg in fridge >>>
(get()を使う - if文が無い分すっきり)
>>> dict = {'spam':1, 'ham':2, 'bacon':0} >>> ingredient = 'ham' >>> print "%s %s in fridge" % (dict.get(ingredient, 'No'), ingredient) 2 ham in fridge >>> ingredient = 'egg' >>> print "%s %s in fridge" % (dict.get(ingredient, 'No'), ingredient) No egg in fridge >>>
比較演算/ブール演算
オブジェクトに対するPythonのTrue/False判定の復習(9章後半)
- 0でない数値、空でないオブジェクトはTrue
- 数値0、空のオブジェクト、NoneはFalse
比較演算については以下の処理が行われる
- 比較結果が正しければTrue、間違っていればFalseが変える
- データ構造が比較対象の場合、構成要素1つ1つについて比較し、比較結果が生成される
ブール演算につかう演算子は次の3つ(オペランドXおよびYはTrue/Falseと解釈される/を返す式が入る)
and/or演算子を使った場合に、結果(True/False)が直接返される訳でなく、オペランドが返ることによって判定が行われる
if/else式
次の3つは同じ処理になる。
判りやすさでいうとif/elseが一番なので、当たり前に判る場合だけ(B)とか(C)とかを使う。
(A)
if X: A = X else: A = Z
(B - Python2.5以降)
A = Y if X else Z
(C - YがTrueであることが前提)
A = ((X and Y) or Z)
同じ結果を得たければbool()を使えば良いが、この場合Y,Zともに実行されるため処理が異なる(上はXに応じてどちらか一方だけ)
bool()はXがTrueならば1、Falseならば0を返すので同じ結果を得られる。
A = [Z, Y][bool(X)]