2013-04-22 279 views
0

我已經嘗試了一切,我的代碼似乎非常接近,但當我定義變量時,我不斷收到名稱錯誤。Python 3寫類返回表面積和球體積

from math import * 

class Spheres: 
    def __init__(self, radius): 
     self.radius = r 
     self.area = 0 
     self.volume = 0 

    def getRadius(self): 
     return self.radius 

    def surfaceArea(self): 
     self.area = 4 * 3.14 * (r*r) 
     return (self.area) 

    def getVolume(self): 
     self.volume = (4/3) * 3.14 * (r * r * r) 
     return (self.volume) 


def main(): 
    r = input("Enter the radius of the sphere: ") 
    s = Spheres(r) 
    print("The volume of the sphere is: ", s.surfaceArea()) 
    print("The surface area of the sphere is: ", s.volume()) 

if __name__ == '__main__': 
    main() 

該錯誤消息我得到的是:

Traceback (most recent call last): 
    File "/local/files/jfult001/CSC221/lab10/9ball.py", line 30, in <module> main() 
    File "/local/files/jfult001/CSC221/lab10/9ball.py", line 26, in main print("The volume of the sphere is: ", s.surfaceArea()) 
    File "/local/files/jfult001/CSC221/lab10/9ball.py", line 15, in surfaceArea self.area = 4 * 3.14 * (r*r) 
NameError: global name 'r' is not defined 
+0

什麼是'NameError'?你能否把它列入你的問題? – 2013-04-22 06:59:14

+0

另外,請檢查您的代碼縮進。上面的縮進是否準確地反映了你的實際代碼是如何縮進的? – 2013-04-22 07:00:36

+0

不是類下的函數全都像第一個那樣縮進,錯誤是: – user2306249 2013-04-22 07:05:26

回答

3
def surfaceArea(self): 
    self.area = 4 * 3.14 * (r*r) 
    return (self.area) 

def getVolume(self): 
    self.volume = (4/3) * 3.14 * (r * r * r) 
    return (self.volume) 

在上述改變所有的R對self.radius事業self.radius功能是你的類不屬於R的相應屬性...

您的__init__還存在一些小錯誤,請按照以下方式更正您的課程:

class Spheres: 
    def __init__(self, r): 
     self.radius = r 
     self.area = 0 
     self.volume = 0 

    def getRadius(self): 
     return self.radius 

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

    def getVolume(self): 
     r=self.radius 
     self.volume = (4/3) * 3.14 * (r * r * r) 
     return (self.volume) 
+0

給我:TypeError:無法乘以類型'str'的非int的序列 – user2306249 2013-04-22 07:11:08

+0

而不是r = input(「輸入球體的半徑:」)執行此操作:r = int(input( 「)輸入球體半徑:」)) – Dusk 2013-04-22 07:12:55

+0

現在我得到:文件「/local/files/jfult001/CSC221/lab10/9ball.py」,第27行,在主 print(「球的表面積是:「),s.volume() TypeError:'int'對象不可調用 – user2306249 2013-04-22 07:21:41

1

讓我告訴你範圍

在Python中,變量作用域,或有限,只要它們在定義的代碼以下面的代碼,例如:

def my_function(): 
    r = 1234 

print r 

這會給你一個NameError,因爲r當地my_function()my_function()外不存在。

同理:

class MyClass(object): 

    def __init__(self, r): 
     self.radius = r 

    def access_r(self): 
     return r 

m = MyClass(1234) 
m.access_r() 

此代碼也會給你一個NameError因爲r__init__()範圍只界定。

但是,請注意,在上例中,您有self.radius = r。恰巧self可通過訪問函數。 r的值存儲在self.radius中,以便從同一類中的其他函數內訪問該值。看看下面的修改,例如:

class MyClass(object): 

    def __init__(self, r): 
     self.radius = r 

    def access_r(self): 
     return self.radius 

m = MyClass(1234) 
print m.access_r() 

此代碼將平穩運行回報1234r值。

0

它看起來像'r'是作爲一個字符串輸入。

我會寫r = float(input(「Enter radius:」))