三道关于python面向对象的练习题

1.题目

小明和小美都爱跑步
小明体重 75 公斤
小美体重 45 公斤
每次跑步会减肥 0.5 公斤
每次吃东西体重增加 1 公斤
需求分析

小明、小美都是一个具体的对象,他们都是人,所以应该抽象成人类
小明、小美是具体的对象的姓名,而体重是另一个属性,所以有两个属性
跑步、吃东西都是一种行为,所以也有两个方法

类图

在这里插入图片描述

实现代码
class Person:
    # 构造方法
    def __init__(self, name, weight):
        # 两个实例属性
        self.name = name
        self.weight = weight

    # 打印实例对象会返回的内容
    def __str__(self):
        return f"名字:{self.name} 体重:{self.weight} 很爱跑步"

    # 跑步实例方法
    def run(self):
        print(f"{self.name} 在跑步,体重减少0.5公斤")
        self.weight -= 0.5

    # 吃饭实例方法
    def eat(self):
        print(f"{self.name} 在吃饭,体重增加1公斤")
        self.weight += 1

# 实例对象一:小明
xiaoming = Person("小明", 75)
print(xiaoming)
xiaoming.eat()
xiaoming.run()
print(xiaoming)

# 实例对象二:小美
xiaomei = Person("小美", 45)
print(xiaomei)
xiaomei.eat()
xiaomei.run()
print(xiaomei)



# 输出结果
名字:小明 体重:75 很爱跑步
小明 在吃饭,体重增加1公斤
小明 在跑步,体重减少0.5公斤
名字:小明 体重:75.5 很爱跑步

名字:小美 体重:45 很爱跑步
小美 在吃饭,体重增加1公斤
小美 在跑步,体重减少0.5公斤
名字:小美 体重:45.5 很爱跑步

2.题目

设计一个类Person,生成若干实例,在终端输出如下信息

小明,10岁,男,上山去砍柴

小明,10岁,男,开车去东北

小明,10岁,男,最爱大保健

老李,90岁,男,上山去砍柴

老李,90岁,男,开车去东北

老李,90岁,男,最爱大保健
实际代码

并不代表最优代码,大家有更好的写法可以评论下

class person:
    # 构造方法,为实例对象初始化属性
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
    
    # 获取对象属性的方法
    def GetSelfMessage(self):
        return self.name, self.age, self.sex
    
    # 实例方法,用于实例对象执行某种行为
    def DoSomething(self, doing):
        print(*self.GetSelfMessage(), doing)

# 实例对象一
xiaoming = person("小明", 10, "男")
xiaoming.DoSomething("上山砍柴")
xiaoming.DoSomething("开车去东北")
xiaoming.DoSomething("大保健")

# 实例对象二
laoli = person("老李", 90, "男")
laoli.DoSomething("上山砍柴")
laoli.DoSomething("开车去东北")
laoli.DoSomething("大保健")


# 输出结果
小明 10 男 上山砍柴
小明 10 男 开车去东北
小明 10 男 大保健
老李 90 男 上山砍柴
老李 90 男 开车去东北
老李 90 男 大保健

3.题目

房子(House)有户型、总面积、家具名称列表;新房子没有任何的家具 
家具(HouseItem)有名字、占地面积
席梦思(bed) 占地 4 平米
衣柜(bed) 占地 2 平米
餐桌(bed) 占地 1.5 平米
将以上三个家具添加到房子中
打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
需求分析

家具有两个属性,房子表面上有三个属性
新房子没有任何的家具,代表构造方法不需要给家具名称列表属性初始化赋值
但房子其实还有一个特殊属性,剩余面积,它的初始值应该和总面积相同
房子添加家具后,剩余面积应该减掉家具的占地面积
席梦思、衣柜、餐桌都是一个具体的对象,都是家具类的实例对象

思考:房子、家具两个类应该先开发哪个类

家具类
因为家具类简单,只有两个方法,且没有行为
房子要使用到家具,被依赖的类,通常应该先开发,可以避免在开发主类过程中,要中途插入开发被依赖的类

类图

在这里插入图片描述

实现代码

家具类

class HouseItem:
    # 构造方法
    def __init__(self, name, area):
        self.name = name
        self.area = area

    def __str__(self):
        return f"家具名称:{self.name} 占地面积:{self.area}" 

房子类

class House:
    # 构造方法
    def __init__(self, type, area):
        self.house_type = type
        self.area = area
        # 剩余面积
        self.free_area = self.area
        # 家具名称列表
        self.item_list = []

    # str
    def __str__(self):
        return f"户型:{self.house_type}\n" \
               f"总面积:{self.area}\n" \
               f"剩余面积:{self.free_area}\n" \
               f"家具:{self.item_list}\n"
	# Python小白学习交流群:153708845
    # 添加家具
    def add_item(self, item):
        # 1、家具占地面积>剩余面积
        if item.area > self.free_area:
            print("剩余面积不足以添加 ", item.name)
            return
        # 2、添加家具名称
        self.item_list.append(item.name)
        # 3、计算剩余面积
        self.free_area -= item.area

执行代码

# 创建三个家具
bed = HouseItem("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)

# 创建房子实例对象
poloHouse = House("120平复试", 120)
# 添加家具
poloHouse.add_item(bed)
poloHouse.add_item(chest)
poloHouse.add_item(table)
# 打印房子信息
print(poloHouse)


# 输出结果
户型:120平复试
总面积:120
剩余面积:112.5
家具:['席梦思', '衣柜', '餐桌']
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一些Python面向对象练习题: 1. 创建一个名为Person的类,包含属性name和age。创建一个对象并打印其属性。 ```python class Person: def __init__(self, name, age): self.name = name self.age = age person1 = Person("John", 25) print(person1.name) print(person1.age) ``` 2. 创建一个名为Rectangle的类,包含属性width和height。定义一个方法用于计算矩形的面积。创建一个矩形对象并打印其面积。 ```python class Rectangle: def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height rectangle1 = Rectangle(5, 10) print(rectangle1.area()) ``` 3. 创建一个名为BankAccount的类,包含属性balance和owner。定义方法用于存款、取款和打印余额。创建一个银行账户对象并进行操作。 ```python class BankAccount: def __init__(self, owner, balance=0): self.owner = owner self.balance = balance def deposit(self, amount): self.balance += amount print("Deposit successful.") def withdraw(self, amount): if amount <= self.balance: self.balance -= amount print("Withdrawal successful.") else: print("Insufficient funds.") def check_balance(self): print("Balance: ", self.balance) account1 = BankAccount("John Doe", 1000) account1.deposit(500) account1.check_balance() account1.withdraw(2000) account1.check_balance() ``` 4. 创建一个名为Vehicle的类,包含属性manufacturer和model。创建两个子类,Car和Motorcycle,并添加属性num_doors和num_wheels。创建一个车辆对象并打印其属性。 ```python class Vehicle: def __init__(self, manufacturer, model): self.manufacturer = manufacturer self.model = model class Car(Vehicle): def __init__(self, manufacturer, model, num_doors): super().__init__(manufacturer, model) self.num_doors = num_doors class Motorcycle(Vehicle): def __init__(self, manufacturer, model, num_wheels): super().__init__(manufacturer, model) self.num_wheels = num_wheels vehicle1 = Car("Toyota", "Corolla", 4) print(vehicle1.manufacturer) print(vehicle1.model) print(vehicle1.num_doors) vehicle2 = Motorcycle("Harley-Davidson", "Sportster", 2) print(vehicle2.manufacturer) print(vehicle2.model) print(vehicle2.num_wheels) ``` 这些练习题可以帮助你巩固Python面向对象编程的基础知识。祝你练习愉快!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值