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
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)
给我:TypeError:无法乘以类型'str'的非int的序列 – user2306249 2013-04-22 07:11:08
而不是r = input(“输入球体的半径:”)执行此操作:r = int(input( “)输入球体半径:”)) – Dusk 2013-04-22 07:12:55
现在我得到:文件“/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()
此代码将平稳运行和回报1234
的r
值。
它看起来像'r'是作为一个字符串输入。
我会写r = float(input(“Enter radius:”))
什么是'NameError'?你能否把它列入你的问题? – 2013-04-22 06:59:14
另外,请检查您的代码缩进。上面的缩进是否准确地反映了你的实际代码是如何缩进的? – 2013-04-22 07:00:36
不是类下的函数全都像第一个那样缩进,错误是: – user2306249 2013-04-22 07:05:26