Python面向对象(题目练习)

案例1:

题目:

a.定义一个Star类(明星类),包含初始化init方法:

成员属性:
明星姓名
明星的电影

成员方法:playing()
打印:“xxx出演了yyy,非常好看”

打印对象时显示“xxx是我的偶像,我非常喜欢他的电影yyy”

删除对象提示“xxx我不再喜欢了”

xxx为明星姓名,yyy是电影的名字

b.键盘循环输入五个Star对象的姓名和电影名。

c.分别调用输入Star对象的playing方法和打印对象
在这里插入图片描述

请输入你喜欢的明星:周星驰
请输入电影名功夫
请输入你喜欢的明星:刘德华
请输入电影名狄仁杰
请输入你喜欢的明星:周润发
请输入电影名赌神
周星驰出演了功夫,非常好看
周星驰是我的偶像,我非常喜欢他的电影功夫
刘德华出演了狄仁杰,非常好看
刘德华是我的偶像,我非常喜欢他的电影狄仁杰
周润发出演了赌神,非常好看
周润发是我的偶像,我非常喜欢他的电影赌神
我不喜欢周星驰了
我不喜欢刘德华了
我不喜欢周润发了
class Star(object):
    # 定义一个__init__()初始化方法
    def __init__(self, name, movie):
        self.name = name
        self.movie = movie

    # 定义一个对象方法 => def 方法(self):
    def playing(self):
        print(f'{self.name}出演了{self.movie},非常好看')

    # 定义一个__str__()魔术方法
    def __str__(self):
        return f'{self.name}是我的偶像,我非常喜欢他的电影{self.movie}'

    # 定义一个__del__()魔术方法
    def __del__(self):
        print(f'{self.name}我不再喜欢了')

list1 = []
for i in range(5):
    name = input('请输入您喜欢明星的姓名:')
    movie = input('请输入您喜欢明星的电影:')
    s = Star(name, movie)
    list1.append(s)

for i in list1:
    i.playing()
    print(i)

案例2:

题目:

搬家具规则:

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

简单一些的写法:

class furniture():
    # 未来对象的属性
    def __init__(self, genre, acreage):
        self.genre = genre
        self.acreage = acreage
    # 未来对象的方法
    def __str__(self):
        return f'家具的类型为{self.genre},此家具占用的面积为{self.acreage}m^2。'
class house():
    # 未来对象的属性
    def __init__(self, address, acreage):
        self.address = address
        self.acreage = acreage
    # 未来对象的方法
    def __str__(self):
        return f'房子的地址为{self.address},占地面积为{self.acreage}m^2,剩余面积为:{h1.acreage-fur1.acreage}m^2'
fur1 = furniture('sofa', 30)
h1 = house('山东省聊城市茌平区', 120)
print(fur1)
print(h1)
if fur1.acreage < h1.acreage:
    print('家具添加成功!')
else:
    print('家具添加失败!')

更加标准的写法:
#5,#6 比较难理解
注意:
①两个类交互,将一个类产生的对象作为参数传入另一个类中
②此处用到面向对象中封装的特性,对象的属性是要封装起来的,而接口就是用来访问它的
③strip(‘,’),默认去除两边的空格,如果指定了符号,代表删除两边指定的符号信息
(Python strip() 方法用于去除字符串开头和结尾处指定的字符(默认为空格或换行符)或字符序列,不会去除字符串中间对应的字符。)
在这里插入图片描述

class House(object):
    # 4、为房子对象定义属性
    def __init__(self, address, area):
        self.address = address
        self.area = area
        # 由于要摆放家具,所以需要定义一个专门属性,用于存放家具信息
        self.items = []  # 其中存放类似[家具对象1,家具对象2,家具对象3....]

    # 5、为房子类对象添加一个addItem方法,用于向房子中添加家具对象
    def addItem(self, item):  # item代表用于接受家具对象,比如item = bed对象
        # 判断家具对象所需要占据的空间
        needarea = bed.getArea()
        if self.area >= needarea:
            # 可以摆放,追加到列表中,房子面积 - 家具占用面积
            self.items.append(item)
            # 房子自身剩余面积 - 家具面积
            self.area -= needarea
            print('恭喜您家具已经成功摆放!')
        else:
            # 家具占用面积 > 房子剩余面积,所以无法摆放
            print('很抱歉,由于此家具占用面积大于房子剩余面积,此家具无法摆放!')

    def __str__(self):
        mfz = f'我的房子位于在{self.address},房子剩余面积为{self.area}'
        # 由于self.items是一个列表,其里面的内容是对象,要想打印里面的所有内容,必须把里面的数据一个一个取出来
        if len(self.items) > 0:
            mfz += ',目前摆放的家具主要有:'
            # 如果列表长度大于0,代表家里面有家具,列出来 => [对象1, 对象2]
            for i in self.items:
                mfz = mfz + i.getName() + ','  # 我的房子位于在山东省聊城市,房子剩余面积为106。,目前摆放的家具主要有:席梦思,硬板床,
                # 当所有家具拼接完成后,去掉最后一个逗号 => strip(','),默认去除两边的空格,如果指定了符号,代表删除两边指定的符号信息
            mfz = mfz.rstrip(',')  # 我的房子位于在山东省聊城市,房子剩余面积为106,目前摆放的家具主要有:席梦思,硬板床
        return mfz  # mfz变量,里面必须是一个字符串类型的数据

class furniture(object):
    # 1、为家具对象定义属性
    def __init__(self, name, area):
        self.__name = name
        self.__area = area

    # 2、专门定义两个公共方法(接口),专门实现对属性的访问
    def getName(self):
        return self.__name

    def getArea(self):
        return self.__area

    # 3、定义一个__str__()魔术方法,用于打印家具对象信息
    def __str__(self):
        return f'家具名称:{self.__name},家具的占用面积:{self.__area}m^2'

bed = furniture('席梦思', 8)
print(bed)

my_house1 = House('山东省聊城市', 120)
my_house1.addItem(bed)
print(my_house1)

bed = furniture('硬板床', 6)
my_house1.addItem(bed)
print(my_house1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值