福岡県だけどPythonを勉強する!

他言語を積極的に推奨する福岡県でPythonを勉強していく記録。

制御構文 - 条件文

●4章 制御構文

 

■■条件文

 

ifステートメントで偽として扱われる項目

・None

・False

・0、 0.0、 0j

・空のシーケンス "" ()

・空のマップ型 {}

・空のセット set()

・__bool__メソッドが定義されているクラスで、Falseを返すもの。

・__len__メソッドが定義されているクラスで、0を返すもの。

 

上記以外の値は真。

 

Trueは真

>>> if True:

...     print("True")

... 

True

 

1は真

>>> if 1:

...     print("True")

... 

True

 

以下は偽になるのでブロックが実行されない。

>>> if :

...     print("True")

... 

>>>

 

 

elifは多言語のelse if。

 

 

>>> if False:

...     print("false")

... elif 1:

...     print("1")

... 

1

 

上から順に評価され、

最初の真のブロックを実行される。

>>> if False:

...     print("False")

... elif 1:

...     print("1")

... elif 0:

...     print("0")

... elif True:

...     print("True")

... 

1

 

ifもelifも偽なのでelseブロックが実行される。

>>> if False:

...     print("False")

... elif 0:

...     print("0")

... else:

...     print("default")

... 

default

 

■andとorとnot

・and、or、notは複数の条件を指定したい時に用いる。

 

・andで繋がれた条件は左から順に評価し、

「全てが真」だった場合にその条件式のブロックが実行される。

>>> def get_true():

...     print("call get_true")

...     return True

... 

>>> def get_false():

...     print("call get_false")

...     return False

... 

>>> if get_true() and get_true():

...     print("True")

... 

call get_true

call get_true

True

 

・orで繋がれた条件は左から順に評価し、

最初に「真が見つかった時点で」その条件式のブロックが実行される。

それ以降のorで繋がれた式は評価しない(無視)。

>>> if get_true() or get_false():

...     print("True")

... 

call get_true

True

>>> if get_false() or get_true():

...     print("True")

... 

call get_false

call get_true

True

 

 

条件式を否定したい時はnotを使う。

0じゃない→偽じゃない→真

>>> if not 0:

...     print("True")

... 

True

 

「1ではない」というだけなので偽というわけではない。

>>> if not 1:

...     print("False")

... 

>>>

 

・andとorの変わった動き。

>>> 1 and 2

2

>>> 0 and 1

0

>>> 1 or 2

1

>>> 0 or 1

1

 

andは左辺が真の時には右辺を返す。

左辺が偽の時は左辺を返す。

 

orは左辺が真の時は左辺を返す。

左辺が偽の時は右辺を返す。

 

考察

「andは偽を好み、orは真を好む」と考えたらいいか。。。

 

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)