【问题标题】:Input to different attributes values from a random.sample list从 random.sample 列表中输入不同的属性值
【发布时间】:2017-08-16 09:45:32
【问题描述】:

所以这就是我想要做的,我不知道我是 python 新手。我已经搜索了几个选项,但我不确定为什么这不起作用。

所以我在 Maya 中有 6 个不同的节点,称为 aiSwitch。我需要生成从 0 到 6 的随机不同数字,并将该值输入到 aiSiwtch*.index 中。

简而言之,结果应该是 aiSwitch1.index =(从0到5的随机数) aiSwitch2.index =(另一个从 0 到 5 的随机数,与之前的不同) 等等 unil aiSwitch6.index

我尝试了以下方法:

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. 获取0到5之间的随机值

  2. 在 aiSwitch1.index 中输入该值

  3. 获取另一个与之前不同的 0 到 6 之间的随机值

  4. 在 aiSwitch2.index 中输入该值

  5. 重复直到 aiSwitch5.index。

我确实让它使用以下表单:

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

这为所有 aiSwitch*.index 提供了一个从 0 到 5 的随机数,但其中一些重复。我认为这可行,因为每次循环运行时都会生成该值,因此使用随机数设置属性。但是数字重复了,我试图避免这种情况。我也尝试了随机播放,但未能从中获取任何值。

我的主要错误似乎是我正在生成一个列表并对其进行采样,但我未能将该列表中的每个不同项目分配给不同的 aiSwitch*.index 节点。我已经没有这方面的想法了。

任何线索将不胜感激。 谢谢。 乔纳森。

【问题讨论】:

  • 线索:random.shuffle列表[0,1,2,3,4,5]
  • 嗨!谢谢你的线索。您的意思是在代码的最后一个结构中添加该洗牌吗?再次感谢!
  • 在您做任何其他事情之前,只需将列表彻底洗牌一次,然后只需遍历洗牌后的值,根据需要使用它们。
  • 这似乎不起作用。循环遍历这些值,因为无论我之前做什么、采样、随机播放或只是一个范围,我总是会分配列表中的最后一个值。非常感谢您提供的线索。

标签: random attributes maya uniform


【解决方案1】:

这是一种有点 Pythonic 的方式:打乱索引列表,然后使用 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)

【讨论】:

  • 确实有效!非常感谢伙计。代码中唯一缺少的是 aiSwitch 之后的 *(只是说以防其他人出于自己的目的尝试修改此代码)。似乎 zip 功能是我需要的。非常感谢您的帮助。谢谢!
  • @Jonathan 我在问题的底部关闭了您的代码 sn-p,但我现在将对其进行编辑。如果答案充分回答了问题,您始终可以将答案标记为“已接受”。
  • 完成!再次感谢约翰!
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 2017-08-20
  • 2020-06-11
  • 1970-01-01
  • 2010-09-07
相关资源
最近更新 更多