Python 知识要点:案例:摆放家具

【需求】

  • 房子(House)有户型,总面积和家具名称列表,新房没有家具
  • 家具(HouseItem)有名字和占地面积,床(4m2),柜(2m2),桌(1.5m2
  • 将三件家具添加到房中
  • 打印房子时,要求输出:户型,总面积,剩余面积,家具名列表

 

【剩余面积】

  • 在创建房子对象时,定义剩余面积,其初始值和总面积相等
  • 当调用 add_item 方法时,向房内添加家具,剩余面积 = 剩余面积 - 家具面积

 

【添加家具】

  • 判断家具面积是否超过剩余面积,超过就提示不能添加
  • 将家具的名称追加到家具名称列表中
  • 用房子的剩余面积 - 家具面积

 

【小结】

  • 先开发家具类,房子要使用到家具,被使用的类通常先开发
  • 创建房子类要使用到 __init__ 和 __str__ 两个内置方法
  • 准备了一个 add_item 方法准备添加家具
  • 使用房子类创建了一个房子对象
  • 让房子对象调用三次 add_item 方法,将家具以实参传递到 add_item 内部
  • 主程序只负责创建房子对象和家具对象
  • 让房子对象调用 add_item 方法将家具添加到房子中
  • 面积计算,剩余面积和家具列表等处理都被封装到房子类的内部
# 家具类
class HouseItem:
    def __init__(self, name, area):
        self.name = name
        self.area = area

    def __str__(self):
        return "[%s] 占地 %.2f" % (self.name, self.area)


# 类与类之间空两行
# 房子类
class House:
    def __init__(self, house_type, area):
        self.house_type = house_type
        self.area = area

        # 剩余面积
        self.free_area = area

        # 家具名称列表
        self.item_list = []

    def __str__(self):
        return ("户型: %s\n总面积: %.2f[剩余: %.2f]\n家具: %s"
                % (self.house_type, self.area,
                   self.free_area, self.item_list))

    def add_item(self, item):
        print("要添加 %s" % item)

        # 1.判断家具的面积
        if item.area > self.free_area:
            print("%s 的面积太大,房内剩余空间不足" % item.name)
            return

        # 2.将家具的名称添加到列表中
        self.item_list.append(item.name)

        # 3.计算剩余面积
        self.free_area -= item.area


# 1.创建家具
bed = HouseItem("西蒙斯", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)

print(bed)
print(chest)
print(table)

# 2.创建房子对象
my_home = House("两室一厅", 70)

my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)

print(my_home)

 

posted @ 2020-02-23 16:49  颗粒成仓  阅读(504)  评论(0编辑  收藏  举报