donc c'est ce que j'essaie de faire, et je ne suis pas sûr de savoir comment je suis nouveau à python. J'ai cherché quelques options et je ne sais pas pourquoi cela ne fonctionne pas.Entrez des valeurs d'attributs différentes à partir d'une liste random.sample
J'ai donc 6 nœuds différents, en maya, appelés aiSwitch. J'ai besoin de générer des nombres différents aléatoires de 0 à 6 et d'entrer cette valeur dans aiSiwtch * .index.
En bref, le résultat devrait être aiSwitch1.index = (nombre aléatoire de 0 à 5) aiSwitch2.index = (un autre nombre aléatoire de 0 à 5 différent de celui avant) Et ainsi de suite unil aiSwitch6.index
J'ai essayé les suivantes:
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)
Ceci est le résultat que je reçois des impressions:
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.
Maintenant, cela se produit pour chaque aiSwitch, parce que c'est dans une boucle bien sûr. Et les nombres aléatoires sont toujours une liste différente car cela arrive chaque fois que la boucle s'exécute.
Alors, où est le problème?
aiSwitch1.index = 1
Et tous les autres aiSwitch * .index toujours prendre seul le dernier élément de la liste, mais le temps que je dois faire le setattr. Il semble que w conserve la dernière valeur de la boucle for. Je ne comprends pas tout à fait comment
Obtenez une valeur aléatoire de 0 à 5
entrée cette valeur dans aiSwitch1.index
Obtenez une autre valeur aléatoire de 0 à 6 différent la précédente
Input cette valeur dans aiSwitch2.index
Répéter jusqu'à aiSwitch 5.index.
J'ai eu à travailler avec la forme suivante:
allSwitch = mc.ls('aiSwitch')
for i in allSwitch:
mc.setAttr(i + '.index', random.uniform(0,5))
Cela a donné un nombre aléatoire de 0 à 5 à tous aiSwitch * .index, mais certains d'entre eux répéter. Je pense que cela fonctionne parce que la valeur est générée à chaque fois que la boucle s'exécute, définissant ainsi l'attribut avec un nombre aléatoire. Mais les chiffres se répètent et j'essayais d'éviter cela. J'ai également essayé un shuffle mais n'ai pas réussi à obtenir des valeurs.
Ma principale erreur semble être de générer une liste et de l'échantillonner, mais je ne parviens pas à assigner tous les éléments différents de cette liste à différents nœuds aiSwitch * .index. Et je manque d'idées pour ça.
Tous les indices seraient grandement appréciés. Merci. Jonathan.
Indice: 'random.shuffle' la liste' [0,1,2,3,4,5] ' –
Salut! Merci pour l'indice. Voulez-vous ajouter ce mélange dans la dernière structure de code? Merci encore! – Jonathan
Mélangez simplement la liste une fois pour toutes avant de faire quoi que ce soit d'autre, puis faites simplement défiler les valeurs mélangées, en les utilisant au besoin. –