0

我已经尝试了所有方法,我的代码似乎非常接近,但是当我定义变量时,我不断收到名称错误。

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 
4

3 回答 3

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.radiusself.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)
于 2013-04-22T07:06:49.617 回答
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都可以访问。的值存储在用于从同一类内的其他函数中访问它的明确目的。以如下修改为例:rself.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()

此代码将顺利运行返回1234.r

于 2013-04-22T07:21:39.293 回答
0

看起来 'r' 是作为字符串输入的。

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

于 2013-04-22T07:49:01.277 回答