【问题标题】:Creating and using module "float object not callable" -Python 3.5.1创建和使用模块“浮动对象不可调用”-Python 3.5.1
【发布时间】:2016-06-04 17:12:06
【问题描述】:

完全新手在这里尝试学习。我应该创建一个我相信我已经在这里完成的模块:

import math

def circum(x):
    return 2 * math.pi * x (format (",.3f"))

def area(x):
    return math.pi * x **2 (format (",.3f"))

我已将此模块命名为 mycircle。 现在我必须导入这个模块并用它来计算圆的周长和面积。我的代码是:

import mycircle

def main():
    radius = float (input ("Please enter the radius of the circle: "))
    circumference = mycircle.circum (radius)
    area = mycircle.area (radius)
    print ("The circumference of the circle is ", format    (mycircle.circum, ",.3f"),  sep="")
    print ("The area of the circle is ", format (mycircle.area, ",.3f"), sep="")

main()

但是,我收到错误消息:

 File "C:/Users/Jameson/Desktop/COP 1000/Chapter 5/54.py", line 26, in <module>
main()
  File "C:/Users/Jameson/Desktop/COP 1000/Chapter 5/54.py", line 21, in main
circumference = mycircle.circum (radius)
File "C:/Users/Jameson/Desktop/COP 1000/Chapter 5\mycircle.py", line 4, in circum
return 2 * math.pi * x (format (",.3f"))
TypeError: 'float' object is not callable

我只能假设它是愚蠢的。任何帮助将不胜感激!我被困在这里。

【问题讨论】:

  • 您在mycircle 模块中使用format 的方式存在问题。但是您可能不应该尝试格式化这些函数中的数字 - 只需返回数值。这样,如果需要,您可以在进一步计算中使用结果。仅在准备好输出数字时对其进行格式化。要了解有关如何使用format 的更多信息,请参阅Format Specification Mini-Language 的文档。

标签: python module python-3.5 callable


【解决方案1】:
2 * math.pi * x

float。当后面跟一对'()' 时,python 认为你是在像函数一样调用它,但是float 是不可调用的。因此出现错误。

要修复它,该行(以及您的 area 函数中的类似行)应更改为

return format(2 * math.pi * x, ",.3f")

另外,请注意您进行了两次格式化:一次在circumarea 中,然后在您打印时在main 中。你只需要做一次。让circumarea 简单地返回浮点数更有意义,并且仅在打印它们时格式化值(在main 中)。

编辑:

两个print 调用也是错误的:

print ("The circumference of the circle is ", format(mycircle.circum, ",.3f"),  sep="")
print ("The area of the circle is ", format(mycircle.area, ",.3f"), sep="")

mycircle.circummycircle.area 是函数,而不是您在 main 中计算的周长和面积。这些应该改为

print ("The circumference of the circle is ", format(circumference, ",.3f"),  sep="")
print ("The area of the circle is ", format(area, ",.3f"), sep="")

【讨论】:

  • 谢谢!好吧,这解决了。所以我改变了模块中的代码,然后在最终代码中删除了format。现在我可以到达:
    Please enter the radius of the circle: 3
    The circumference of the circle is &lt;function circum at 0x0359BF18&gt; .
    The area of the circle is &lt;function area at 0x0359BF60&gt; .
    抱歉,我正试图弄清楚评论回复中的格式。似乎做得不太好。
  • @JamesBelcher 是的,你也应该纠正这些。请参阅编辑后的答案。
  • 哦,哇,好吧,现在我想我明白我做了什么了。我认为在执行area = mycircle.circum (radius) 之前,我将radius 传递给函数,我不得不再次调用它们。那么发生的事情是我传递了radius,然后不再需要在下面调用它们,对吧?
  • 切换了一切,现在可以正常工作了。太感谢了!我完全误解了这些功能的工作方式。感激不尽。
  • @JamesBelcher 你将radius 传递给circum —— 换句话说,你调用circum 并带有参数radius —— 并将返回值分配给circumference。您现在可以使用circumference,无需再次调用(除非您想传递不同的值)。
猜你喜欢
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
相关资源
最近更新 更多