2017-08-16 14 views
1

これは私がやろうとしていることです。どのように私がpythonを初めて使うのかわかりません。私はいくつかのオプションを探しましたが、なぜこれが機能しないのか分かりません。random.sampleリストから別の属性値を入力してください

私はaiSwitchと呼ばれる6つの異なるノードをmayaに持っています。私は0から6までランダムに異なる数字を生成し、その値をaiSiwtch * .indexに入力する必要があります。

要するに、結果は aiSwitch1.index =(0から5までの乱数) aiSwitch2.index =(0から以前とは異なる5に別の乱数) よく、そうでaiSwitch6.index unilべき

私は次のことを試してみました:

import maya.cmds as mc 
import random 

allswtich = mc.ls('aiSwitch*') 
    for i in allswitch: 
    print i 
    S = range(0,6) 
    print S 
    shuffle = random.sample(S, len(S)) 
    print shuffle 
    for w in shuffle: 
     print w 
     mc.setAttr(i + '.index', w) 

これは私が印刷物から取得結果である:

aiSwitch1 <-- from print i 
[0,1,2,3,4,5] <--- from print S 
[2,3,5,4,0,1] <--- from print Shuffle (random.sample results) 
2 
3 
5 
4 
0 
1 <--- from print w, every separated item in the random.sample list. 

これは、すべてのaiSwitchで起こります。なぜなら、それはループの中にあるからです。また、乱数は常にループが実行されるたびに発生するため、別のリストになります。

だから問題はどこにありますか?

aiSwitch1.index = 1 

、他のすべてのaiSwitch * .INDEXは常にのみ、リスト内の最後の項目が、私はするsetAttrを行うために取得時間がかかります。 wはforループの最後の値を保持しているようです。私はかなりの

  1. がaiSwitch1.indexで5

  2. 入力にその値を0からランダムな値を取得する方法を理解していない

  3. 0から6異なるまでに別のランダムな値を取得します。 aiSwitchまで

  4. 入力し、その値

  5. aiSwitch2.index

    で繰り返し前1 5.索引。

私はそれが次の形式で動作するように手に入れた:

allSwitch = mc.ls('aiSwitch') 
for i in allSwitch: 
    mc.setAttr(i + '.index', random.uniform(0,5)) 

これは、すべてのaiSwitch *の.INDEXに0から5までの乱数を与えたが、そのうちのいくつかは繰り返します。私は、ループが実行されるたびに値が生成されているため、この属性が乱数で設定されていると考えられます。しかし、数字は繰り返され、私はそれを避けようとしていました。私もシャッフルを試みたが、それから何か値を得ることに失敗した。

私の主な間違いは、リストを生成してサンプリングしているようですが、そのリストのすべてのアイテムを別のaiSwitch * .indexノードに割り当てることに失敗しています。そして、私はこれのためのアイデアが不足しています。

すべての手がかりをいただければ幸いです。おかげさまで ジョナサン。ここで

+0

ヒント: 'random.shuffle'リスト' [0,1,2,3,4,5] ' –

+0

こんにちは!手がかりをありがとう。そのシャッフルをコードの最後の構造に追加することを意味しますか?再度、感謝します! – Jonathan

+0

リストをシャッフルするだけで、何かをする前にリストをシャッフルしてから、シャッフルされた値を必要に応じてループするだけです。 –

答えて

1

は多少Python的な方法である:(あなたがここで何をする必要があるかである、並行して構造を反復処理するために有用である)、その後zipを使用して、それを反復処理、インデックスのリストをシャッフル:

import random 

index = list(range(6)) 
random.shuffle(index) 

allSwitch = mc.ls('aiSwitch*') 
for i,j in zip(allSwitch,index): 
    mc.setAttr(i + '.index', j) 
+0

これは確かに動作します!ありがとう、たくさんの男。コード内の唯一欠けているのは、aiSwitchの後の*です(他の誰かが独自の目的のためにこのコードを修正しようとした場合にのみ)。ジップ機能のようなものが私の必要なものです。本当に助けに感謝します。ありがとう! – Jonathan

+0

@Jonathan質問の一番下にあるコードスニペットを外していましたが、今すぐ編集します。質問に適切に答えた場合は、常に「受け入れ」とマークすることができます。 –

+0

完了!もう一度ジョンに感謝します! – Jonathan

関連する問題