![](/img/trans.png)
[英]Object Oriented Python Program calculating volume and Surface area of a sphere
[英]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
,因为r
是my_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.