211-面向对象习题

搬家具

题干

搬家具规则:

  1. 家具分不同的类型,并占用不同的面积
  2. 输出家具信息时,显示家具的类型和家具占用的面积
  3. 房子有自己的地址和占用的面积
  4. 房子可以添加家具,如果房子的剩余面积可以容纳家具,则提示家具添加成功;否则提示添加失败
  5. 输出房子信息时,可以显示房子的地址、占地面积、剩余面积

运行效果:

当前房间可用面积为:100
床的面积为:20
ok:已经存放到房间中
当前房间可用面积为:80 
容纳的物品有: 床
床的面积为:30
ok:已经存放到房间中
当前房间可用面积为:50 
容纳的物品有: 床, 席梦思 

代码

# 定义一个home类
class Home:

    def __init__(self, area):
        self.area = area  #房间剩余的可用面积
        self.containsItem = []

    def __str__(self):
        msg = "当前房间可用面积为:" + str(self.area)
        if len(self.containsItem) > 0:
            msg = msg + " 容纳的物品有: "
            for temp in self.containsItem:
                msg = msg + temp.getName() + ", "
            msg = msg.strip(", ")
        return msg

    # 容纳物品
    def accommodateItem(self,item):
        # 如果可用面积大于物品的占用面积
        needArea = item.getUsedArea()
        if self.area > needArea:
            self.containsItem.append(item)
            self.area -= needArea
            print("ok:已经存放到房间中")
        else:
            print("err:房间可用面积为:%d,但是当前要存放的物品需要的面积为%d"%(self.area, needArea))


# 定义bed类
class Bed:

    def __init__(self,area,name = '床'):
        self.name = name
        self.area = area

    def __str__(self):
        msg = '床的面积为:' + str(self.area)
        return msg

    # 获取床的占用面积
    def getUsedArea(self):
        return self.area

    def getName(self):
        return self.name


# 创建一个新家对象
newHome = Home(100)#100平米
print(newHome)

# 创建一个床对象
newBed = Bed(20)
print(newBed)

# 把床安放到家里
newHome.accommodateItem(newBed)
print(newHome)

# 创建一个床对象
newBed2 = Bed(30,'席梦思')
print(newBed2)

# 把床安放到家里
newHome.accommodateItem(newBed2)
print(newHome)