根据我昨天提出的问题(这里是passing contents from multiple lists generated in different functions to a file)我已经编写了代码。部分代码如下
def lower_lip_under_upper_teeth_bezier(x_n, p0, p3) :
""" Calculating sampling points using rational bezier curve equation"""
lower_lip_under_upper_teeth_p_u_list = []
u = x_n
p1 = p0
p2 = p3
lower_lip_under_upper_teeth_p_u = math.pow(1 - u, 3) * p0 + 3 * u * math.pow(1 - u, 2) * p1 \
+ 3 * (1 - u) * math.pow(u, 2) * p2 + math.pow(u, 3) * p3
lower_lip_under_upper_teeth_p_u = lower_lip_under_upper_teeth_p_u * w
d = math.pow(1 - u, 3) * w + 3 * u * w * math.pow(1 - u, 2) + 3 * (1 - u) * w * math.pow(u, 2) + math.pow(u, 3) * w
lower_lip_under_upper_teeth_p_u = lower_lip_under_upper_teeth_p_u / d
print "p(u): ", lower_lip_under_upper_teeth_p_u
lower_lip_under_upper_teeth_p_u_list.append(lower_lip_under_upper_teeth_p_u)
return lower_lip_under_upper_teeth_p_u_list
def mel_script() :
""" Generating the mel script with the animation information """
print "\n The mel script generated for the input speech with the chosen energy level"
with open("mel.txt", "w") as melFile :
melFile.write('setKeyframe "BS_stickyLips_SL_recept.head_geo_stickyLips_wire";'
'setKeyframe "BS_stickyLips_baseSL_recept.head_geo";'
'setKeyframe "BS_stickyLips_wireSL_recept.head_geo";'
'setKeyframe "blend_shape.lip_round";'
'setKeyframe "blend_shape.jaw_open";'
'setKeyframe "blend_shape.lips_spread";'
'setKeyframe "blend_shape.lips_part";'
'setKeyframe "blend_shape.lower_lip_under_upper_teeth";')
for p in lower_lip_under_upper_teeth_bezier :
melFile.write('setAttr "blend_shape.jaw_open" %f ;' % p )
melFile.write('setKeyframe -breakdown 0 -hierarchy none -controlPoints 0 -shape 0 {"blend_shape"};')
但我有个错误
^{pr2}$
lower_lip_under_upper_teeth_bezier
是一个函数。错误信息清楚地告诉它,没有办法绕过它。在您可能认为
lower_lip_under_upper_teeth_bezier
是iterable,但事实并非如此。在现在,我只是猜测,但我相信你想做的是:
编辑(见注释):我认为这里对python的工作原理有一些基本的误解。。。在python中(就像在大多数编程语言中一样!)当你声明一个函数时,你要声明它的名字和它期望的参数。在
如果您试图将5个列表传递给
^{pr2}$mel_script
,那么当您声明mel_script
时,您应该这样说:然后,在调用
mel_script
时,需要将这些列表传递给它。如果这样的列表是由函数生成的(比如f1
,f2
,f3
…)。您可以在一行中完成所有操作:否则,您必须将列表存储在临时变量中并将其传递给
mel_scirpt
:在上面的例子中,注意
f1()
有圆括号,表示您正在调用名为f1
的函数。如果您忽略这些,那么您将传递函数本身,而不是其结果。在实际上,有更聪明的方法来实现这一点(比如传递可变数量的参数,或者使用闭包,但是从你的问题中我知道你还没有(现在!)精通python,所以现在最好还是坚持这个方法!:)
啊!在
您没有调用函数。要调用它,请使用
并用适当的值代替参数。在
相关问题 更多 >
编程相关推荐