今さらPython3 (21) - IF文
この本の第4章を読んでます。
- 作者: Bill Lubanovic,斎藤康毅,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
ちなみに、この本の日本語版書籍と英語版のPDFファイルを持っているので、手元に本がないときは英語版を読んでますが、各セクションごとに番号が振られているのは日本語版のみ。ということで、セクション4.2を読んでますみたいな表記はしてません。あと、このブログの見出しと本の章見出しも一致してません。
だって、本を買ってもらわないとw
elifは少し気持ち悪い
>>> disaster = True >>> if disaster: ... print("Woe!") ... else: ... print("Whee!") ... Woe!
ウォーとウィーにどういう違いがあるか分からんけど、ifの後ろの内容がTrueならステップを実行して、Trueじゃなかったら、elseのステップを実行すると。あとはコロン忘れないでねという話と、インデントにTab使うなよというあたりが注意点。インデントにTab使うなってのは、インタプリタの話で、Tab押したときに自動的にスペース4個とかに変換してくれるエディタもある。(Pycharmとか)
話逸れたな。次は入れ子。
>>> 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
これもコード書く量が減って生産性が上がるかもね。
(つづく)