Python 3写类返回表面积和球体积

问题描述:

我已经尝试了一切,我的代码似乎非常接近,但当我定义变量时,我不断收到名称错误。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

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

让我告诉你范围

在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值。

它看起来像'r'是作为一个字符串输入。

我会写r = float(input(“Enter radius:”))