我正在使用python中的一个简单的cuboid类程序,我对这一切都很陌生,所以我对我的代码的第一个版本有几个问题:
from math import *
class Cuboid:
def __init__(self,length,width,height):
self.length=length
self.width=width
self.height=height
self.LSA=0
self.SA=0
self.volume=0
def getDimensions(self):
return self.length
return self.width
return self.height
def LateralSurfaceArea(self):
LSA=2*((self.length*self.height)+(self.width*self.height))
return LSA
def SurfaceArea(self):
SA=2*((self.length*self.width)+(self.width*self.height)+(self.height*self.length))
return SA
def Volume(self):
Volume=self.length*self.width*self.height
return volume
我的第一个问题,这是设置类并初始化它的正确方法吗? 第二个问题,这一部分有没有发光错误?我正在自学一本教科书,没有例子。 最后我的主要是:
from cuboid import *
def main():
cb = Cuboid(3, 4, 5)
l, w, h = cb.getDimensions()
print("The length of the cuboid is", l)
print("The width of the cuboid is", w)
print("The height of the cuboid is", h)
print("lateral surface area=", cb.LateralSurfaceArea())
print("surface area=", cb.SurfaceArea())
print("volume=", cb.Volume())
main()
当我运行main函数时,我收到以下错误:
l, w, h = cb.getDimensions()
TypeError: 'int' object is not iterable
有谁知道为什么会出现这个错误,无论如何我可以绕过它?抱歉,我知道我只是想问一个具体的问题,但是为了正确学习id而不是确保我正朝着正确的方向前进,因为课程对我来说是新的。
答案 0 :(得分:3)
返回多个值时,不要使用多个return语句。相反,你返回一个元组:
return (self.length, self.width, self.height)
在您的情况下,只执行第一个return
语句,从而将单个int传递给调用者。然后它尝试通过迭代将该值解压缩到您指定的三个变量中。返回的单个值是不可迭代的,因此是错误。
答案 1 :(得分:0)
稍微清理过的版本:
class Cuboid:
def __init__(self, length, width, height):
self.length = length
self.width = width
self.height = height
@property
def lateral_surface_area(self):
front_area = self.length * self.height
side_area = self.width * self.height
return 2 * (front_area + side_area)
@property
def surface_area(self):
top_area = self.length * self.width
front_area = self.length * self.height
side_area = self.width * self.height
return 2 * (top_area + front_area + side_area)
@property
def volume(self):
return self.length * self.width * self.height
def main():
cube = Cuboid(3, 4, 5)
print("The length of the cuboid is", cube.length)
print("The width of the cuboid is", cube.width )
print("The height of the cuboid is", cube.height)
print("Lateral surface area =", cube.lateral_surface_area)
print("Surface area =", cube.surface_area)
print("Volume =", cube.volume)
if __name__=="__main__":
main()