如何解决TypeError:“ float”对象不可调用

时间:2018-09-22 03:21:46

标签: python python-3.x

import math

def reportSphereVolume(r):
    SphereVolume = ((4/3)*math.pi*((r)**3))
    return SphereVolume


def reportSphereSurfaceArea(r):
    SphereSurfaceArea = ((4)*math.pi((r)**2))
    return SphereSurfaceArea

radius = int(input("What is the radius of the sphere? " ))
reportSphereVolume(radius)
reportSphereSurfaceArea(radius)

执行后,我收到以下消息。

What is the radius of the sphere? 10
Traceback (most recent call last):
  File "D:\Thonny\SphereAreaVolume.py", line 16, in <module>
    reportSphereSurfaceArea(radius)
  File "D:\Thonny\SphereAreaVolume.py", line 11, in reportSphereSurfaceArea
    SphereSurfaceArea = ((4)*math.pi((r)**2))
TypeError: 'float' object is not callable

我迷路了,我一直在观看视频和阅读教科书,但仍然无法解决。 请帮忙。

3 个答案:

答案 0 :(得分:5)

这是这部分:

math.pi((r)**2)

python的感觉异常可能意味着不同的意思。您可以像在数学中那样使用它们来对表达式进行分组,就像在体积和面积计算中所做的那样。但是它们也用在函数调用中,例如reportSphereVolume(radius)。而且它们也不能用于乘法。而是必须使用显式的*

math.pi是一个float常量,当用括号将其写成这样时,python认为您正在尝试将其作为函数调用。因此,错误:TypeError 'float' object is not callable'。应该是:

SphereSurfaceArea = (4)*math.pi*(r**2)

答案 1 :(得分:2)

请注意体积方程和表面积方程之间的差异(添加了空间以使差异在视觉上更明显):

SphereVolume =      ((4/3)*math.pi*((r)**3))
SphereSurfaceArea = ((4)  *math.pi ((r)**2))

后者在*之后缺少乘法运算符(math.pi)。与代数类不同,大多数编程语言都需要与*进行显式乘法。名称后的括号表示python中的函数调用。

我建议您在括号中多加注意。应该使用它们来使计算的目的更清楚,例如,当操作顺序不是很明显时。在这种情况下,您的某些括号是多余的,使表达式难以阅读。例如,整个表达式周围的括号以及各个数字或变量周围的括号不能帮助阐明运算的顺序,可以将其删除以使表达式更具可读性。另一方面,小数(4/3)周围的括号和指数(r**3)(r**2)周围的括号也是有意义的,因为它们清楚表明您希望首先对这些运算符求值。考虑到这一点,您可以执行以下操作:

SphereVolume =      (4/3)*math.pi*(r**3)
SphereSurfaceArea = 4*math.pi(r**2)

请注意如何更容易阅读并帮助使错误更容易发现。

答案 2 :(得分:0)

您在第二功能中犯了一个非常小的错误,该错误是表面积 在math.pi之后签入第10行,您还没有使用*运算符。因此,python将其视为函数。 只需在math.pi之后添加*并完成 这是代码:

import math 
def reportSphereVolume(r): 
    SphereVolume =  
    ((4/3)*math.pi*((r)**3)) 
    return SphereVolume 
def reportSphereSurfaceArea(r):   
    SphereSurfaceArea =
    ((4)*math.pi*((r)**2)) 
    return SphereSurfaceArea
radius = int(input("What is the radius of   
the sphere? " ))
print("Vol : %f" %  
(reportSphereVolume(radius)))    
print("Area : %f" % 
(freportSphereSurfaceArea(radius)))

希望它有帮助!!