最後の旅を始めよう

-黒の英雄譚・零-

MAYA Python どっ基礎講座‗07 『繰り返し処理』

2023年01月07日 | MAYA_Pyhon...
プログラム3つの基礎の最後
「繰り返し」について解説していきたいと思います。


繰り返し処理は
特にスクリプト制御の恩恵を得られる機能の一つでしょう。
単純な作業の連続を、迅速かつ正確に行うのは
人間よりもコンピュータの方が遥かに優れております。



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_エラーメモ
編集
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« MAYA Python どっ基礎講座‗06... | トップ | MAYA Python どっ基礎講座‗08... »
最新の画像もっと見る

コメントを投稿

MAYA_Pyhon...」カテゴリの最新記事