繁体   English   中英

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

[英]Python 3 Write class to return surface area and volume of sphere

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

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

让我告诉您有关范围的信息

在Python中,变量的作用域或仅限于定义它们的代码。以下面的代码为例:

def my_function():
    r = 1234

print r

这会给您一个NameError ,因为rmy_function() 局部 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中,目的是为了从同一类内的其他函数内部访问r 以以下修改为例:

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(input(“ Enter radius:”))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM