我想定义一个类,该类可以计算圆的面积并计算圆的数量
input 1,2,3
Output [3.14, 12.56, 28.26]
3
但是我没有得到想要的输出。
使用的代码:
class Circle:
def __init__(self, radius):
[self.radius for i in radius]
def area(self):
return [3.14*self.radius**2 for i in self.radius]
# return 3.14 * self.radius ** 2
inputradiusstr = "1,2,3"
list_radius = inputradiusstr.split(',')
obj2 = Circle(list_radius)
print(obj2.area())
给出以下错误:
Traceback (most recent call last):
File "path/to/file.py", line 11, in <module>
obj2=Circle(list_radius)
File "path/to/file.py", line 3, in __init__
[self.radius for i in radius]
File "path/to/file.py", line 3, in <listcomp>
[self.radius for i in radius]
AttributeError: 'Circle' object has no attribute 'radius'
答案 0 :(得分:1)
我认为您上课时可能会误会。将类视为对象的模板。调用Circle(...)
时,将创建该对象的 instance ,并且完全可以接受一个类的多个实例。
在您的示例中,考虑为三个输入(或输入很多)中的每个输入制作三个圆圈,这将简化您的班级,因为您不需要任何列表。
class Circle:
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius**2
然后,您的主要代码将把每个输入当作自己的圈:
inputradiusstr="1,2,3"
list_radius=inputradiusstr.split(',')
for radius in list_radius:
c = Circle(int(radius))
print(c.area())
请注意,我们需要将半径从字符串类型转换为整数,以便可以对其进行计算。
如果您需要计算创建的圆圈数,则只需len(list_radius)
。
答案 1 :(得分:0)
inputradiusstr="1,2,3"
list_radius=[float(item) for item in inputradiusstr.split(',')]
因此,半径可以是浮点数,而不是字符串。
def area(self):
return [3.14*self.radius**2 for i in self.radius]
#return 3.14 * self.radius **2
在列表理解中,它应该为3.14*i**2
。
答案 2 :(得分:0)
您的课程应如下所示:
class Circle:
def __init__(self,radius):
self.radius = radius
def area(self):
return [3.14 * r**2 for r in self.radius]
答案 3 :(得分:0)
类型转换适用于您的情况。
inputradiusstr="1,2,3"
list_radius=list(map(int,inputradiusstr.split(',')))
obj2=Circle(list_radius)
print(obj2.area())
您的班级的缩进不匹配。我认为是在输入问题时。