TypeError:' float'对象在Python中不可调用

时间:2015-10-29 21:01:33

标签: python python-3.x

我对编码很陌生,所以这可能是一个愚蠢的问题但是当我尝试运行我的程序时,我得到了标题中提到的错误。 似乎是问题的代码是这样的:

def branch(replicas):
    ER = d * 0.5 * w
    N0 = len(replicas)
    newReplicas = []   ##### Error on this line 

    for j in range( len(replicas) ):

        replica = replicas[j]

        r2 = 0

        for x in replica:

            r2 += x * x

            V = 0.5 * mass * w**2 * r2

            W = exp(-(V - ER) / rootT)

            mn = int(W + random.uniform(0,1))

            if mn >= 3:

                newReplicas.append( replica )

                newReplicas.append( replica )

                newReplicas.append( replica )

            elif mn == 2:    

                newReplicas.append( replica )

                newReplicas.append( replica )

            elif mn == 1:

                newReplicas.append( replica )

    replicas = newReplicas
    N1 = len(replicas)
    ER = ER + ((hbar/deltaT)(1-(N1/N0)))

任何帮助将不胜感激。提前谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你的问题就在这里

ER = ER + ((hbar/deltaT)(1-(N1/N0)))

我认为你所追求的是这个

ER = ER + ((hbar/deltaT)*(1-(N1/N0)))

Python认为你想要的是调用评估

返回的值的对象
hbar/deltaT

所以,如果

hbar = 2.0
deltaT = 1.0

然后它认为你试图调用它创建的浮动对象,因为在这种情况下它将是值为2.0的浮点对象,其中包含评估结果的参数

1-(N1/N0)

由于float对象不可调用,因此不起作用,抛出异常。

基本上你可以通过将乘法运算符放在

之间来解决这个问题
(hbar/deltaT)

(1-(N1/N0))

结尾
((hbar/deltaT)*(1-(N1/N0)))

我认为你正在努力做到这一点。除非你不想做乘法