Q1次のうち、bool型の値として正しいのはどれですか?
bool 型と if 文の使い方
Pythonの論理型boolをTrue/Falseの2値から学びます。score == 100のような比較演算がなぜboolになるのか、if文での条件分岐、and/or/notの真理値表までを扱います。
論理型(bool)とは
論理型(bool、ブーリアン)はTrue(真)とFalse(偽)の2つの値しか持たない型です。「はい/いいえ」「成立する/しない」といった2択の状態を表現するために使います。
int が数値、str が文字列を扱うのと同じように、bool は真偽という一種類の情報を専門に扱います。
論理型は他の型と違い、取りうる値が True と False の2つだけに限られる。代入・比較・条件分岐と相性がいい。
TrueとFalseは先頭が必ず大文字です。trueやTRUEと書くとNameErrorになります。
また文字列ではないので"True"のようにクォートで囲まないでください(それだとstr型になってしまいます)。
# bool型の代入
is_animal = True
is_human = False
print(is_animal) # True
print(is_human) # False
print(type(is_animal)) # <class 'bool'>
# "True" と書くと str型になる(別物)
looks_bool = "True"
print(type(looks_bool)) # <class 'str'>
比較演算で bool が生まれる
bool 値はTrue / Falseと直接書くだけでなく、比較演算の結果としても生まれます。
2つの値を比較する演算子は以下の6種類。結果は必ずTrueかFalse(つまり bool)になります。
| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
| == | 等しい | 5 == 5 | True |
| != | 等しくない | 5 != 3 | True |
| > | より大きい | 5 > 3 | True |
| < | より小さい | 5 < 3 | False |
| >= | 以上 | 5 >= 5 | True |
| <= | 以下 | 5 <= 3 | False |
式を評価するとTrue / Falseのどちらかが返る。この結果を変数に入れても使える。
age = 20
print(age == 20) # True (等しい)
print(age != 18) # True (等しくない)
print(age >= 18) # True (以上)
print(age < 18) # False (より小さい)
# 結果を変数に入れておける
is_adult = age >= 18
print(is_adult) # True
print(type(is_adult)) # <class 'bool'>
# 文字列同士も比較できる(==, != が便利)
print("apple" == "apple") # True
print("apple" == "Apple") # False (大文字小文字は区別される)
= と == は別物
=(イコール1つ)は代入、==(イコール2つ)は比較です。age = 20は「age に 20 を入れる」、age == 20は「age は 20 と等しいか?」を判定します。ここを取り違えると意図しない動作につながりやすいので注意しましょう。
if 文で bool を使う
bool が最もよく登場する場面がif 文(条件分岐)です。ifのあとに書いた式がTrue のときだけ、中のブロックが実行されます。
if 文の詳しい使い方は後の章で扱いますが、ここでは「bool の値によって処理が切り替わる」ことを体感しておきましょう。
ifの行の末尾にはコロン :を付け、実行したい処理は半角スペース4つ分のインデント(字下げ)で書きます。この字下げが、if に属する処理の範囲を示します。
is_animal = True
# is_animal が True なら中身が実行される
if is_animal:
print("動物です")
# False だとスキップされ、何も表示されない
is_human = False
if is_human:
print("人間です")
# 比較演算の結果をそのまま if に渡してもいい
age = 20
if age >= 18:
print("成人です")
論理演算子:and / or / not
複数の条件を組み合わせて判定したいときは、論理演算子 and / or / notを使います。
これらは bool を入力にして bool を返す演算子で、日本語の「かつ」「または」「〜でない」に対応します。
andは両方 Trueのときだけ True。
orはどちらかが Trueなら True。
notは True と False を反転する。
真理値表
andとorの結果は、左右の bool の組み合わせで次のように決まります。和集合と積集合のような関係と覚えるとわかりやすいです。
| A | B | A and B | A or B |
|---|---|---|---|
| True | True | True | True |
| True | False | False | True |
| False | True | False | True |
| False | False | False | False |
is_man = True
is_adult = True
# and:両方 True のときだけ True
if is_man and is_adult:
print("成人男性です")
# or:どちらかが True なら True
if is_man or is_adult:
print("男性か大人です")
# not:反転する
is_child = not is_adult
print(is_child) # False
# 比較演算と組み合わせても使える
age = 25
if age >= 18 and age < 65:
print("現役世代")
英語の論理演算子を間違えない
他の言語では&& || !を使うものもありますが、Python では必ず and / or / not(英単語)を使います。&&と書くとSyntaxErrorになります。
この記事では、論理型 (bool)とその使い方を学びました。True / Falseの2値だけを扱う型であること、比較演算から bool が生まれること、if 文で条件分岐に使えること、そしてand / or / notで条件を組み合わせられること — これが条件分岐を書くための土台になります。
次の記事では、数を扱うためのint 型とfloat 型(浮動小数点数)をもっと深く見ていきます。
理解度チェック
まずは1問ずつ答えてみましょう。
Q2次のコードの実行結果はどれですか?x = 10
print(x == 10 and x < 5)
Q3次のコードの実行結果はどれですか?is_open = False
print(not is_open)