はじめに
複雑な条件分岐に困っていませんか?
プログラムでは各所でif文による条件分岐を記述します。
分岐の条件として式を記述し、その結果である真偽値により分岐させるわけです。
このため、真偽値の扱い方をしっかりとマスターしておかなければいけません。
これはwhile文によるループを記述する際にも重要になってきます。
この記事では、Python初心者の方向けに、比較と真偽値について説明していきます。
if文とwhile文のおさらい
まず、if文とwhile文のおさらいをしておきます。
if文は、次のように条件判定式を記述して分岐させるのでした。
例:
num = 200 if num > 100: print("100より大きいです") else: print("100以下です")
この例では、条件が真(True)の場合if文が実行され、それ以外の場合にelse文が実行されます。
さらにelif文を追加して、複数の条件判定を持たせることも可能です。
また、while文は条件判定式が真である(成り立っている)場合にループ処理を継続するのでした。
たとえば、次のような形です。
例:
i = 0 while i < 100: print(i) i += 1
ここでは、条件判定式に比較演算子(<)を使っています。
比較演算子の結果はbool値(真偽値)になるので、条件判定式に使えるのです。
それでは、比較演算子について詳しくみていきましょう。
比較演算子による真偽値
Pythonの比較演算子は6種類あります。
順番にみていきましょう。
まずは、等しいかどうかを判定する演算子からです。
次の例をみて下さい。
例:
num = 100 print(num == 100) print(num != 100)
この例では、「=(イコール)」と「!=(ノットイコール)」を使って、変数と等しい(または等しくない)か比較しています。結果がbool値で返ってきていることがおわかりになるでしょう。
これらの式は、そのままif文やwhile文に使用できます。
次は、大小を比較する演算子です。
例:
num = 100 print(num > 50) print(num < 50) print(num > 100) print(num < 100)
数学で習ったように、「>(大なり)」と「<(小なり)」を使って、数値の大小を比較できます。
注意しなければいけないのは、比較対象の数値自身は含まれない点です。
このため、最後の2行はどちらも偽(False)になります。
比較対象の数値自身を含めたい場合には、次のように「=」と組み合わせて使います。
例:
num = 100 print(num >= 100) print(num <= 100)
このように、「>=(大なりイコール)」と「<=(小なりイコール)」を使うと、比較対象の数値を含めることができ、どちらの場合でも真(True)になります。
2文字の演算子なので、文字の順序を間違えないように注意しましょう。
論理演算子による真偽値
比較演算子について説明してきましたが、複数の比較をしたい場合にはどうすればいいのでしょうか?
たとえば、数値が50より大きく、100より小さいといった条件です。
これは、次のようにif文をネストさせることで実現できます。
例:
num = 75 if num > 50: if num < 100: print("50より大きく100より小さいです") else: print("100以上です") else: print("50以下です")
やりたいことは実現できていますが、できればひとつのif文で書きたいですよね。
その場合は、次のように論理演算子を使います。
例:
num = 75 if num > 50 and num < 100: # 50 < num < 100 でもよい print("50より大きく100より小さいです") else: print("50以下もしくは100以上です")
これで複数の条件をひとつにすることができました。
論理演算子には「and」「or」「not」の3種類があり、andは両方の条件が真(True)を返す場合にのみ真、orはどちらかの条件が真を返す場合に真となります。それ以外はすべて偽(False)です。
また、notは真偽値を反転(TrueをFalse、FalseをTrueに)します。
組み合わせは多くはないので、次の例を参考に覚えておきましょう。
例:
print("True and True: {0}".format(True and True)) print("True and False: {0}".format(True and False)) print("False and True: {0}".format(False and True)) print("False and False: {0}".format(False and False)) print("True or True: {0}".format(True or True)) print("True or False: {0}".format(True or False)) print("False or True: {0}".format(False or True)) print("False or False: {0}".format(False or False)) print("not True: {0}".format(not True)) print("not False: {0}".format(not False))
真偽値の部分(True/False)については、任意の条件判定式に置き換えることができます。
また、次のように複数の論理演算子を組みわせることもできます。
例:
mode = 3 if not mode == 0 and (mode == 1 or mode == 3): pass # 処理を書く
複数の論理演算子を組み合わせるときは、演算子の優先順位に注意しましょう。
not/and/orと優先順位が低くなっていくため、例のようにカッコ(())を使って優先順位を変更(先に計算)する必要があります。
まとめ
真偽値の扱い方はマスターできましたか?
真偽値を生み出すためには、主に比較演算子を使います。
または、bool値(真偽値)に対して論理演算子を使う場合もあるでしょう。
同じ条件であっても、何通りかの書き方ができます。
条件を工夫して、できるだけわかりやすい条件判定式にしましょう。