今さらPython3 (21) - IF文

この本の第4章を読んでます。

入門 Python 3

入門 Python 3

ちなみに、この本の日本語版書籍と英語版のPDFファイルを持っているので、手元に本がないときは英語版を読んでますが、各セクションごとに番号が振られているのは日本語版のみ。ということで、セクション4.2を読んでますみたいな表記はしてません。あと、このブログの見出しと本の章見出しも一致してません。

だって、本を買ってもらわないとw

elifは少し気持ち悪い

>>> disaster = True
>>> if disaster:
...     print("Woe!")
... else:
...     print("Whee!")
...
Woe!

ウォーとウィーにどういう違いがあるか分からんけど、ifの後ろの内容がTrueならステップを実行して、Trueじゃなかったら、elseのステップを実行すると。あとはコロン忘れないでねという話と、インデントにTab使うなよというあたりが注意点。インデントにTab使うなってのは、インタプリタの話で、Tab押したときに自動的にスペース4個とかに変換してくれるエディタもある。(Pycharmとか)

www.jetbrains.com

話逸れたな。次は入れ子。

>>> furry = True
>>> small = True
>>> if furry:
...     if small:
...         print("It's a cat.")
...     else:
...         print("It's a bear!")
... else:
...     if small:
...         print("It's a skink!")
...     else:
...         print("It's a human. Or hairless bear.")
...
It's a cat.
>>>

furryの意味が分からなかったけど、毛のふさふさしたという意味らしい。あとskinkはトカゲね。毛に覆われてて小さければ猫、小さくなければクマ、毛に覆われてなくて小さければトカゲ、小さくなければ人か毛のないクマ。入れ子する度にインデントが下がるのがポイントかな。

>>> color = "puce"
>>> if color == "red":
...     print("It's a tomato")
... elif color == "green":
...     print("It's a green pepper")
... elif color == "bee purple":
...     print("T don't know what it is, but only bees can see it")
... else:
...     print("I've never heard of the color", color)
...
I've never heard of the color puce

個人的にはelifは少し気持ち悪いんだけどelse ifだと間にスペース入れるとか入れないとか面倒なのでelifにしたと言い聞かせてます。

比較演算子の整理

>>> x = 7
>>> x == 5
False
>>> x == 7
True
>>> 5 < x
True
>>> x < 10
True
>>> x != 5
True
>>> x != 7
False
>>> x in [3, 5, 7]
True
>>> x <= 5
False
>>> x >= 5
True
>>>

<, >, <=, >=は算数で習うからOKとして、代入には=を使うので、比較の時は==を使い分ける、あとは!=を使うあたりは言語によって仕様が違う事があるので、Pythonでの掟を理解しておくべしというところかな。

>>> 5 < x and x < 10
True
>>> (5<x) and (x<10)
True
>>> 5 < x or x < 10
True
>>> 5 < x and x > 10
False
>>> 5 < x and not x > 10
True
>>>

これを見る限りは、and/orの両側でそれぞれ比較が行われてTrue/Falseが返された上で、True and TrueならTrue、True and FalseならFalseみたいに返していると理解。以下に、テキストに書いてない例を試したのは、"Boolean operators have lower precedence than the chunks of code that they're comparing"の意味しているところを理解したかったから。

>>> 5 + 3 < x
False
>>> x < 2 * 4
True
>>>

比較されるchunk of code(コードの塊)を先に計算してから比較するという意味なら、上みたいな例を使うべきじゃないのかなと思ったんだよね。

>>> 5 < x < 10
True
>>> 5 < x < 10 < 999
True

これはコードが短くて住むので助かるね。

TrueなのかFalseなのか

何をもってTrueなのかFalseなのかという判断のところ。

>>> some_list = []
>>> if some_list:
...    print("There's something in here!")
... else:
...    print("Hey, it's empty!")
...
Hey, it's empty!

入れ物(list, tuple, dict, set)あたりが空っぽの場合はFalseを返すと理解。ま、他のも含めて確認してみよう。

>>> some_tuple = ()
>>> if some_tuple:
...      print("filled")
... else:
...      print("empty")
...
empty
>>> some_dict = {}
>>> if some_dict:
...    print("filled")
... else:
...    print("empty")
...
empty
>>> some_set = set()
>>> some_set
set()
>>> if some_set:
...     print("filled")
... else:
...     print("empty")
...
empty
>>>
>>> zero_int = 0
>>> if zero_int:
...    print("not zero")
... else:
...    print("zero")
...
zero
>>> zero_float = 0.0
>>> if zero_float:
...    print("not zero")
... else:
...    print("zero")
...
zero
>>> zero_float = 1.1
>>> if zero_float:
...    print("not zero")
... else:
...    print("zero")
...
not zero
>>>
>>> null = None
>>> if null:
...    print("filled")
... else:
...    print("Null")
...
Null

これもコード書く量が減って生産性が上がるかもね。

(つづく)