【问题标题】:TypeError: 'float' object not callable in PythonTypeError:'float' 对象在 Python 中不可调用
【发布时间】:2015-10-30 06:27:33
【问题描述】:

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

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)))

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

【问题讨论】:

  • 你的最后一行应该做什么?你有一个闭合的括号,然后是一个开放的括号。
  • 最后一行应该修改我在块之前的一行中定义的变量 ER,您可以在此处看到。感谢您指出这一点,我已修复它,不再出现错误!
  • 我冒险猜测在闭括号和开括号之间存在乘法。否则,这将是生成 TypeError 的地方。
  • 在全局上下文中定义了许多变量:d、w、mass。不是问题,但也不是好的做法。
  • 这些变量都是我需要在程序的各个部分使用的输入值。在全球范围内定义事物有什么不好?

标签: python python-3.x


【解决方案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)

由于浮动对象不可调用,所以这不起作用,并抛出异常。

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

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

(1-(N1/N0))

结束

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

我认为您正在尝试这样做。除非你不想做乘法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    相关资源
    最近更新 更多