バリケンのPython日記 RSSフィード

2008-07-05

[] 制御構造(1)  制御構造(1) - バリケンのPython日記 を含むブックマーク はてなブックマーク -  制御構造(1) - バリケンのPython日記  制御構造(1) - バリケンのPython日記 のブックマークコメント

そろそろプログラミング言語らしく、Pythonで使える制御構造について勉強してみるよ。

while文

「while 条件 ブロック」と書くと、条件を満たしている間中、ブロックを繰り返し実行するよ。

>>> a, b = 0, 1
>>> while b < 10:
...   print b
...   a, b = b, a + b
...
1
1
2
3
5
8
>>>

ここでのポイントは二つあるよ。ひとつは「ブロック」、もうひとつは「条件」だよ。

whileの「ブロック」

まず最初のポイント。「ブロック」とは、ひとまとまりに実行したい文をまとめたものだよ。以前「Rubyの「ブロック」再考」というエントリを書いたから、参考にしてね。

Rubyの場合は「do」と「end」または「{」と「}」で囲んでブロックを表現したけど、Pythonのブロックは「コロンで始まり、以降の文でインデントが揃っている部分まで」という方法でブロックを表現するよ。

さっきの例だと、「print b」と「a, b = b, a + b」という二つの文がブロックとしてまとめられているよ。

ちなみに、等価なRubyのコードは次のようになるよ。Rubyでは、ブロックは「do」と「end」で表すんだったよね。余談だけど、whileのブロックの場合、「do」は省略できるよ。

irb(main):001:0> a, b = 0, 1
=> [0, 1]
irb(main):002:0> while b < 10 do
irb(main):003:1*   puts b
irb(main):004:1>   a, b = b, a + b
irb(main):005:1> end
1
1
2
3
5
8
=> nil
irb(main):006:0>

whileの「条件」

次のポイント。「条件」の部分に書かれた「式文(expression statement)」を評価して得られた結果が「真」であれば「条件を満たしている」、「偽」であれば「条件を満たしていない」ということになるよ。

Rubyでは「偽」は「nil」か「false」のことだったよね。Pythonの場合は、「None」や「False」だけじゃなくて、整数の「0」や実数の「0.0」、虚数の「0j」、空の文字列「''」、空のリスト「[]」、空のタプル「()」、空の辞書「{}」なんかも「偽」だよ。あと「偽」以外のオブジェクトはすべて「真」だけど、特に「真」であることを表したいときは「True」使うよ。

トラックバック - http://python.g.hatena.ne.jp/muscovyduck/20080705