プログラム3つの基礎の最後
「繰り返し」について解説していきたいと思います。
繰り返し処理は
特にスクリプト制御の恩恵を得られる機能の一つでしょう。
単純な作業の連続を、迅速かつ正確に行うのは
人間よりもコンピュータの方が遥かに優れております。
for文を使った繰り返し
それでは、一番単純な形のコードを走らせてみましょう。
これを走らせると、0~4までの数字がログにプリントされます。
もう、お解りかとは思いますが、
この「for」文は range( 5 ) に指定している回数分
コードブロック内の処理を実行します。
これを応用する事で、指定の回数だけ同じ処理を行う事が出来ます。
以下のコードは「ロケータを二つ作成し親子付けする」というものを5回繰り返します。
(ちなみに、ポジションXの値を i にする事で、X方向へずらす差分も設けております)
この range の様な繰り返し処理の回数等を決める要素を
「イテラブルオブジェクト」といいます。
for 変数 in イテラブルオブジェクト:
繰り返し処理をするコード
イテラブルオブジェクトには、
rangeの代わりに「文字列のリスト」を使用する事も出来ます。
以下のコードを走らせると、リスト内の文字列を変数として繰り返しの処理を行います。
こちらも応用すると、繰り返し処理を指定の名前で行う事が出来ます。
以下のコードでは、スケルトンをリスト内の名前のジョイントで作成します。
この様に、繰り返し処理は、工夫次第でいくらでも効率を上げられる
そんな可能性を秘めた機能と言えるでしょう。
あと、あまり使う機会は無さそうですが
イテラブルオブジェクトには文字列をそのまま使う事も出来ます。
本当に何処に使えるのか解りませんが
覚えていたら何処かで使う機会もあるかも知れません。
while文を使った繰り返し
繰り返し処理には「while文」を使うという方法もあります。
回数で指定する「for文」に対して
「while文」は条件によって繰り返すか否かを決めます。
上記のコードは「iNo」変数の値が5以下の場合のみ
コードブロック内の処理を実行します。
その為、回数に縛られる事無く処理を行う事が出来ますが、
逆にコードブロック内の処理で、条件を達成出来ないと
無限に処理を繰り返す状態になってしまいます。
サンプルコード内の「iNo = iNo + 1」を消した状態で走らせると再現出来ますが
Mayaを強制終了するまで処理が止まらなくなるので、お勧めはしません。
ですので、
初心者のうちは「for文」の方をメインで使用する事を推奨致します。
次項 → 08_リスト
前項 → 06_インデント
一覧へ
関連-------------------------------------
Python_MAYA機能メモ
Python_MAYA_ちょっとしたツール集
Python_エラーメモ
編集
「繰り返し」について解説していきたいと思います。
繰り返し処理は
特にスクリプト制御の恩恵を得られる機能の一つでしょう。
単純な作業の連続を、迅速かつ正確に行うのは
人間よりもコンピュータの方が遥かに優れております。
for文を使った繰り返し
それでは、一番単純な形のコードを走らせてみましょう。
#---------------------------------------------
for i in range( 5 ):
print( i )
#---------------------------------------------
これを走らせると、0~4までの数字がログにプリントされます。
もう、お解りかとは思いますが、
この「for」文は range( 5 ) に指定している回数分
コードブロック内の処理を実行します。
これを応用する事で、指定の回数だけ同じ処理を行う事が出来ます。
以下のコードは「ロケータを二つ作成し親子付けする」というものを5回繰り返します。
(ちなみに、ポジションXの値を i にする事で、X方向へずらす差分も設けております)
#---------------------------------------------
import maya.cmds as cmds
for i in range( 5 ):
oLoc_01 = cmds.spaceLocator( p = [i, 0, 0] )
oLoc_02 = cmds.spaceLocator( p = [i, 0, 0] )
cmds.parent( oLoc_02, oLoc_01 )
#---------------------------------------------
この range の様な繰り返し処理の回数等を決める要素を
「イテラブルオブジェクト」といいます。
for 変数 in イテラブルオブジェクト:
繰り返し処理をするコード
イテラブルオブジェクトには、
rangeの代わりに「文字列のリスト」を使用する事も出来ます。
以下のコードを走らせると、リスト内の文字列を変数として繰り返しの処理を行います。
#---------------------------------------------
for o in [ "No1", "No2", "V3" ]:
print( o )
#---------------------------------------------
リスト内の文字列が順番にログにプリントされましたでしょうか。こちらも応用すると、繰り返し処理を指定の名前で行う事が出来ます。
以下のコードでは、スケルトンをリスト内の名前のジョイントで作成します。
#---------------------------------------------
import maya.cmds as cmds
iHeight = 0
for oName in [ "Root", "Hips", "Spine", "Neck", "Head" ]:
cmds.joint( name = oName, p = [0, iHeight, 0] )
iHeight = iHeight + 5
#---------------------------------------------
この様に、繰り返し処理は、工夫次第でいくらでも効率を上げられる
そんな可能性を秘めた機能と言えるでしょう。
あと、あまり使う機会は無さそうですが
イテラブルオブジェクトには文字列をそのまま使う事も出来ます。
#---------------------------------------------
for s in "Maya":
print( s )
#---------------------------------------------
このコードを走らせると、Mayaを一文字づつログにプリントします。本当に何処に使えるのか解りませんが
覚えていたら何処かで使う機会もあるかも知れません。
while文を使った繰り返し
繰り返し処理には「while文」を使うという方法もあります。
回数で指定する「for文」に対して
「while文」は条件によって繰り返すか否かを決めます。
#---------------------------------------------
iNo = 0
while iNo <
5:
print( iNo )
iNo = iNo + 1
#---------------------------------------------
上記のコードは「iNo」変数の値が5以下の場合のみ
コードブロック内の処理を実行します。
その為、回数に縛られる事無く処理を行う事が出来ますが、
逆にコードブロック内の処理で、条件を達成出来ないと
無限に処理を繰り返す状態になってしまいます。
サンプルコード内の「iNo = iNo + 1」を消した状態で走らせると再現出来ますが
Mayaを強制終了するまで処理が止まらなくなるので、お勧めはしません。
ですので、
初心者のうちは「for文」の方をメインで使用する事を推奨致します。
次項 → 08_リスト
前項 → 06_インデント
一覧へ
関連-------------------------------------
Python_MAYA機能メモ
Python_MAYA_ちょっとしたツール集
Python_エラーメモ
編集
※コメント投稿者のブログIDはブログ作成者のみに通知されます