スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
新しい記事を書く事で広告が消せます。
BlenderユーザーのためのPython入門的な文 その2
Python使ったことないしプログラミングもしたこともないというBlenderユーザ向けにPythonの説明をしてみる(Blender2.5+向け)、その2。
前回はこちら
今回は第2回ということで、制御文について扱います。
制御文というのは、条件分岐やループなど、プログラムの流れを制御する文のことです。
今回扱うのは以下の制御文になります。
・if(条件分岐)
・for(ループ)
・while(ループ)
・try(例外処理)
■if文
これは条件によって処理内容を変えるときに使うものです。
前回同様、BlenderのPython Consoleを開いて使ってみます。下のコードを1行づつ入力してください。
ifに続く"x==5"というのが条件を表す式になります。"=="の部分は比較演算子というもので、これだと「等しい」を意味します。
比較演算子は以下のようなものがあります。
上の例ではxの値が5だったためif文の中のprintが実行されましたが、これをx=3などに変更して実行するとif文の中は実行されません。
また、複数の条件式を扱いたい場合は論理演算子によって条件式をつなぐことができます、例えば以下のように。
この"and"というのが論理演算子で、この場合の条件は「xが0より大きく5より小さい」ということになります。
論理演算子は以下のようなものがあります。
次の行からがifの条件にあったときに実行される文になります。
ifの行を打ち込んでEnterを押してもここはすぐ実行されず、空行を入力した所で実行されます。これはif文のブロックが全て入力されていないとプログラムを実行できないため、このようにひとかたまりのif文を入力し終わるまでプログラムが実行されないようになっています。
そして1つ注目してほしいのが、ここのprunt('spam')が1段字下げされていることです。これはPythonでブロック構造を表現するための文法で、この字下げされた範囲がifの条件にあったときに実行される文になります。字下げにはTabキーを使います。
また、条件にあわない時に別の処理をさせたい時は"else"を使います。こんな感じになります。
xは5では無いため、else以下の文が実行されました。
上の例では条件1つでしたが、複数の条件分岐を作りたい時には"elif"を使います。"elif"は"else if"の略で、意味としては「それ以外でもしこの条件にあうとき」といった感じです。
■for文
次にfor文について。これはあるリストに対して中にある全てのデータを処理したい時などに使うものです。
単純にリストの中身を順に表示するだけの内容です。
ループ毎にリスト変数lの要素(リストの各項目のことです)がxに代入され処理されるようになっています。
pythonのfor文はC言語などの他の言語と違う仕様になっているので、他の言語のfor文に慣れている人だと最初違和感を覚えるかもしれません。
Blenderらしく、blendファイル中の全てのオブジェクトの名前を表示するには以下のようにします。
■while文
while文は、単純に条件に合致する間処理をループし続けるものです。
いまいちいい例が思い浮かばなかったので無限ループさせてみます。
このサンプルは絶対に実行しないで下さい、Blenderがフリーズします(バージョンによると思いますが)。
普通に使う場合はサンプルのTrueの代わりに適当な条件式を入れてやります。
for文やwhile文などのループ処理を途中で抜けるために、break文というものがあります。
使い方は以下の通り、for文などで特定の要素を探したい時などによく使います。
上のサンプルでは'Cube'という名前のオブジェクトを探し、見つかった所でループ処理を抜けています。
■try文
try文というのはプログラム実行中にtry文の中でエラーが起きたとき、それを適切に処理してやるためのものです。
pythonではプログラム実行中のエラーを例外と呼ぶため、これを例外処理と呼びます。
例外処理は例外の起こり得る部分となるtry節と、例外を処理するためのexcept節からなります。
まずは意図的に例外を起こしてみます。
見ての通りのゼロ除算エラーです。
try文を使って例外処理をしてみます。
ゼロ除算エラーは出なくなりました。try節内のprintは実行されずに例外が出た所でexcept節に飛んでいます。
except文はサンプルの様に例外の種類を指定することもできますし、'except:'とだけ書けば全ての例外を処理することができます。
今回は以上です。次回はオブジェクトについての予定です、お疲れさまでした。
前回はこちら
今回は第2回ということで、制御文について扱います。
制御文というのは、条件分岐やループなど、プログラムの流れを制御する文のことです。
今回扱うのは以下の制御文になります。
・if(条件分岐)
・for(ループ)
・while(ループ)
・try(例外処理)
■if文
これは条件によって処理内容を変えるときに使うものです。
前回同様、BlenderのPython Consoleを開いて使ってみます。下のコードを1行づつ入力してください。
>>> x=5
>>> if x==5:
... print('spam')
...
spam
>>>
ifに続く"x==5"というのが条件を表す式になります。"=="の部分は比較演算子というもので、これだと「等しい」を意味します。
比較演算子は以下のようなものがあります。
・A==B AとBは等しい
・A<B AはBより小さい
・A>B AはBより大きい
・A<=B AはB以下である
・A>=B AはB以上である
・A!=B AとBは等しくない
上の例ではxの値が5だったためif文の中のprintが実行されましたが、これをx=3などに変更して実行するとif文の中は実行されません。
>>> x=3
>>> if x==5:
... print('spam')
...
>>>
また、複数の条件式を扱いたい場合は論理演算子によって条件式をつなぐことができます、例えば以下のように。
>>> x=3
>>> if x>0 and x<5:
... print('spam')
...
spam
>>>
この"and"というのが論理演算子で、この場合の条件は「xが0より大きく5より小さい」ということになります。
論理演算子は以下のようなものがあります。
・A and B AかつBである(両方の条件を満たす場合のみ)
・A or B AもしくはBである(片方の条件だけでも満たす場合)
・not A Aではない(条件を満たさない場合)
次の行からがifの条件にあったときに実行される文になります。
ifの行を打ち込んでEnterを押してもここはすぐ実行されず、空行を入力した所で実行されます。これはif文のブロックが全て入力されていないとプログラムを実行できないため、このようにひとかたまりのif文を入力し終わるまでプログラムが実行されないようになっています。
そして1つ注目してほしいのが、ここのprunt('spam')が1段字下げされていることです。これはPythonでブロック構造を表現するための文法で、この字下げされた範囲がifの条件にあったときに実行される文になります。字下げにはTabキーを使います。
また、条件にあわない時に別の処理をさせたい時は"else"を使います。こんな感じになります。
>>> x=3
>>> if x==5:
... print('spam')
... else:
... print('I love Suzanne.')
...
I love Suzanne.
>>>
xは5では無いため、else以下の文が実行されました。
上の例では条件1つでしたが、複数の条件分岐を作りたい時には"elif"を使います。"elif"は"else if"の略で、意味としては「それ以外でもしこの条件にあうとき」といった感じです。
>>> if x==1:
... print('spam')
... elif x==2:
... print('spam spam')
... elif x==3:
... print('spam spam spam')
... elif x==4:
... print('spam spam spam spam')
... else:
... print('I love Suzanne.')
...
■for文
次にfor文について。これはあるリストに対して中にある全てのデータを処理したい時などに使うものです。
単純にリストの中身を順に表示するだけの内容です。
>>> l=["tomato","spam","apple"]
>>> for x in l:
... print(x)
...
tomato
spam
apple
>>>
ループ毎にリスト変数lの要素(リストの各項目のことです)がxに代入され処理されるようになっています。
pythonのfor文はC言語などの他の言語と違う仕様になっているので、他の言語のfor文に慣れている人だと最初違和感を覚えるかもしれません。
Blenderらしく、blendファイル中の全てのオブジェクトの名前を表示するには以下のようにします。
>>> for x in bpy.data.objects:
... print(x.name)
...
Camera
Cube
Lamp
>>>
■while文
while文は、単純に条件に合致する間処理をループし続けるものです。
いまいちいい例が思い浮かばなかったので無限ループさせてみます。
>>> while True:
... print('spam!')
...
このサンプルは絶対に実行しないで下さい、Blenderがフリーズします(バージョンによると思いますが)。
普通に使う場合はサンプルのTrueの代わりに適当な条件式を入れてやります。
for文やwhile文などのループ処理を途中で抜けるために、break文というものがあります。
使い方は以下の通り、for文などで特定の要素を探したい時などによく使います。
>>> for x in bpy.data.objects:
... print(x.name)
... if x.name=='Cube':
... break
...
Camera
Cube
>>>
上のサンプルでは'Cube'という名前のオブジェクトを探し、見つかった所でループ処理を抜けています。
■try文
try文というのはプログラム実行中にtry文の中でエラーが起きたとき、それを適切に処理してやるためのものです。
pythonではプログラム実行中のエラーを例外と呼ぶため、これを例外処理と呼びます。
例外処理は例外の起こり得る部分となるtry節と、例外を処理するためのexcept節からなります。
まずは意図的に例外を起こしてみます。
>>> a=0
... b=10/a
Traceback (most recent call last):
File "", line 1, in
ZeroDivisionError: division by zero
>>>
見ての通りのゼロ除算エラーです。
try文を使って例外処理をしてみます。
>>> a=0
... try:
... b=10/a
... print(b)
... except ZeroDivisionError:
... print('division by zero')
... b=0
...
division by zero
>>> b
0
>>>
ゼロ除算エラーは出なくなりました。try節内のprintは実行されずに例外が出た所でexcept節に飛んでいます。
except文はサンプルの様に例外の種類を指定することもできますし、'except:'とだけ書けば全ての例外を処理することができます。
今回は以上です。次回はオブジェクトについての予定です、お疲れさまでした。