我已经尝试了一切,我的代码似乎非常接近,但是当我定义变量时,我不断收到名称错误。
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
答案 0 :(得分: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.radius
因为self.radius
是您班级的相应属性而不是...
您的__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)
答案 1 :(得分: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
。 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
的值。
答案 2 :(得分:0)
看起来'r'是作为字符串输入的。
我会写r = float(输入(“输入半径:”))