前回は条件分岐について学びました. 今回は条件式についてさらに深く解説していきます. 論理演算子 ブール値 リストと包含関係の順番で解説していきます.
論理演算子と言うと難しく聞こえますが,and or not のことです. 条件式の中にはこれらを用いることができます. 実際の例を見てみましょう.
# and を使わない場合
x = int(input())
if x > 100:
if x < 150:
print("Hello World")
これは今までの知識で書くことができますね.
100より大きいか確かめた後に150より小さいかを確かめています.
# and を使う場合
x = int(input())
if x > 100 and x < 150:
print("Hello World")
andを使った書き方です.
二重のifブロックよりすっきりしましたね.
# 不等号で両側から挟む場合
x = int(input())
if 100 < x < 150:
print("Hello World")
説明していませんでしたが,不等号で両側から挟むこともできます.
これはPython特有の書き方で他のプログラミング言語にはあまりない書き方かもしれません.
# or を使わない書き方
x = int(input())
if x < 100:
print("Hello World")
elif x > 150:
print("Hello World")
これは今までの知識で書ける書き方です.
上から順に条件を判断していきどこかで一つでも満たしたら処理を行えばいいのです.
# or を使った書き方
x = int(input())
if x < 100 or x > 150:
print("Hello world")
orを使った書き方です. だいぶすっきりしましたね.
実際,orを使わずに複数の条件を表現しようとすると,elifと処理を何度も書くことになるため面倒です.
or の便利さが分かっていただけたかと思います.
# not を使わない書き方
x = int(input())
if x < 100:
print("入力は100じゃないよ")
elif x > 100:
print("入力は100じゃないよ")
100より大きいなら表示 100より小さいなら表示という書き方をしました.
これは見にくい上に or でまとめることができますね.
# not を使わない書き方
x = int(input())
if x == 100:
pass
else:
print("入力は100じゃないよ")
突然 pass というワードが出てきて驚いている方もいられるかもしれませんが,これは
処理を何も行わないということを示す文です.
x が100である場合は pass を用いて処理を行いません.
そうでない場合は出力をします.
明示的に何も行わないことを記述したい場合はいい書き方かもしれません.
# not を使った書き方
x = int(input())
if not x == 100:
print("入力は100じゃないよ")
notを使って簡潔に記述しました.
読みやすさも短さもいい感じですね.
# ブール値に着目した書き方
x = int(input())
if x-100:
print("入力は100じゃないよ")
「ブール値」に着目した書き方です.
ここまでの知識では訳が分からない書き方ですね.
ブール値についてはこの後すぐに解説します.
ここまでは3つの論理演算子 and or not について学びました. 同じ処理をするプログラムでも読みやすさや長さに違いがありましたね. プログラムの書き方に正解はありませんが,以下のことに気を付けるといいと思います.
次はブール値について学んでいきましょう. 条件式の正体が見えてきます. 今までごまかし続けていましたが,条件分岐のときからお話ししていた True False が正にブール値なのです. True False はそれぞれ1, 0と同一視されます.
print("論理和:",True+True,True+False,False+True,False+False)
print("論理積:",True*True,True*False,False*True,False*False)
print("Hello World:",bool("Hello World"))
print("空白:",bool(" "))
print("空の文字列:",bool(""))
print("[1]:",bool([1]))
print("空のリスト:",bool([]))
print("100:",bool(100))
print("0:",bool(0))
print("-100:",bool(-100))
以下のような結果になりましたね.
if [1,2,3]:
print("A")
if []:
print("B")
if "Hello World":
print("C")
if "":
print("D")
if 100:
print("E")
if 0:
print("F")
if not 0:
print("G")
以下のようになります.
# ブール値に着目した書き方
x = int(input())
if x-100:
print("入力は100じゃないよ")
これは if x-100 の部分で x が100でない限りはx-100==0 にならないことを利用していますね.
このコードの正体はオブジェクトの持つブール値を利用した書き方だったのです.
最後は手短に終わりますよ. ある x というデータが複数の要素を持つデータ型に含まれるかどうかを簡単に判定する方法があります. if x in (オブジェクト) という書き方をすることで簡単に記述できます. 以下では文字列型とリスト型について判定してみましょう.
if "H" in "Hello World":
print("H in Hello World")
if "h" not in "Hello World":
print("h not in Hello World")
if 1 in [1,2,3,4,5]:
print("A")
if 0 in [1,2,3,4,5]:
print("B")
以下のようになります.
今回は様々な条件式とオブジェクトのブール値について学びました. スマートに条件分岐が書けるかどうかでプログラムの可読性がだいぶ変わってきます. 使いながら徐々に慣れていきましょう. 次回は繰り返し処理を行うfor文について解説します.