Python 3编写类以返回sph的表面积和体积

2024-06-16 12:56:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经尝试了所有的方法,我的代码看起来非常接近,但是当我定义变量时,我仍然会得到一个名称错误。

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 

Tags: oftheselfreturnismaindefarea
3条回答

让我告诉你关于范围

在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()

此代码将顺利运行返回1234,即r的值。

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

我会写r=float(输入(“Enter 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)

在上面的函数中,将所有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)

相关问题 更多 >