2017-04-25 3 views
-1

私はプロジェクトでPythonで作業していますが、なぜプロジェクトでエラーが発生しているのかわかりません。幾何球を表すクラスからTypeErrorを取得する

プロジェクトは以下の通りです。

  1. 幾何球を表すクラスを作成します。あなたのクラスは次のメソッドを実装する必要があります:

    • __init__(self, radius)与え半径を持つ球を作成します。
    • getRadius(self)この球の半径を返します。
    • surfaceArea(self)球の表面積を返します。
      面積式は、表面積=4πr2
    • volume(self)球体の体積を返します。容積式は
  2. は球の半径をユーザに促し、表面積と体積は所定の半径のために何であるかをユーザに伝えるmain()方法を記述しています。

私の現在のコードは以下の通りです。私は、コードを実行すると

import math 
class Spheres: 
    def __init__(self,radius): 
     self.radius = radius 
     self.area = 0 
     self.volumeResult = 0 

    def getRadius(self): 
     return self.radius 

    def surfaceArea(self): 
     r = self.radius 
     self.area = 4 * math.pi * (r * r) 
     return self.area 

    def volume(self): 
     r = self.radius 
     self.volumeResult = (4/3) * math.pi * (r * r * r) 
     return self.volumeResult 

def main(): 
    r = input("enter radius of circle:") 
    r = int(r) 
    radius = Spheres(r) 
    v = radius.volume() 
    a = radius.surfaceArea() 

    print ("volume of circle :" , v()) 
    print ("Surface Area of circle:" , a()) 

main() 

それはコードが全く機能しない理由私は理解していないこの

enter radius of circle:5 #### i enter 5 here to test it 
Traceback (most recent call last): 
File "C:\Users\Austin\Desktop\python bonus project\AustinBaker Python 
bonus.py", line 30, in <module> 
main() 
File "C:\Users\Austin\Desktop\python bonus project\AustinBaker Python 
bonus.py", line 27, in main 
print ("volume of circle :" , v()) 
TypeError: 'float' object is not callable 
>>> 

のように見えます。

+1

'プリント( "円のボリューム:"、v)を'。あなたは 'float'を呼び出すことはできません –

答えて

0

あなたの問題はここにある:

print ("volume of circle :" , v()) 
print ("Surface Area of circle:" , a()) 

あなたはvaを呼び出そうとしているが、これらの変数は、彼らがfloatのある呼び出し可能ではありません。

In [1]: v = 12.4 

In [2]: callable(v) 
Out[2]: False 

In [3]: type(v) 
Out[3]: float 

だけprint("volume of circle :" , v)()なし。今後の参考のために

は、トレースバックはあなたの友達です:

File "C:\Users\Austin\Desktop\python bonus project\AustinBaker Python 
bonus.py", line 27, in main <--- ## the line number in your program where it all went wrong 
print ("volume of circle :" , v()) <-- ## the line of code that crapped out 
TypeError: 'float' object is not callable <-- ## why it crapped out 

翻訳:あなたのメイン機能でライン27で

  1. あなたはタイプfloat
  2. の変数を呼び出そうとしました

だからv = 12.4なら、あなたはトライdを関数のように呼び出す: print ("volume of circle :" , v()) # ==> 12.4()

これはあなたのエラーです...

ヒント:

class Sphere: 
    def __init__(self,radius): 
     self._radius = radius 
     self._area = None 
     self._volume = None 
    @property 
    def area(self): 
     if self._area is None: 
      r = self.radius   
      self._area = 4 * math.pi * (r * r)    
     return self._area 
    @property 
    def volume(self): 
     if self._volume is None: 
      r = self.radius   
      self._volume = (4/3) * math.pi * (r * r * r) 
     return self._volume 
    @property 
    def radius(self): 
     return self._radius 
    @radius.setter 
    def radius(self, radius): 
     self._radius = radius 
     self._area = None 
     self._volume = None 

ので、この方法:

In [1]: s = Sphere(2) 

In [2]: s.area 
Out[2]: 50.26548245743669 

In [3]: s.volume 
Out[3]: 33.510321638291124 

In [4]: s.radius = 3 

In [5]: s.volume 
Out[5]: 113.09733552923254 

In [6]: s.area 
Out[6]: 113.09733552923255 
関連する問題