Python-面向对象经典习题

# 一、定义名为MyTime的类,其中应有三个实例变量 时hour 分minute 秒second
# 1)为了给对象初始化赋值,编写构造方法,对时分秒附初始值
# 2)为了保证数据的安全性,这三个成员变量应声明为私有、
# 3)对三个属性分别定义封装get和set方法,定义一个main方法,创建一个MyTime类的对象并调用这六个方法。
class MyTime:
    def __init__(self,hour,minute,second):
        self.__hour = hour
        self.__minute = minute
        self.__second = second

    def get_hour(self):
        return self.__hour

    def get_minute(self):
        return self.__minute

    def get_second(self):
        return self.__second

    def set_hour(self,h):
        self.__hour = h

    def set_minite(self,m):
        self.__minute = m

    def set_second(self,s):
        self.__second=s

if __name__ == '__main__':
    s = MyTime(3,28,50)
    print(s.get_hour())
    print(s.get_minute())
    print(s.get_second())
    s.set_hour(6)
    print(s.get_hour())
    s.set_second(10)
    print(s.get_second())
    s.set_minite(22)
    print(s.get_minute())



# 二、为"无名的粉"写一个类WuMingFen,有三个属性 面码:String theMa  粉的分量(两) int quantity  是否带汤 boolean likeSoup
# 要求:
# 1)写一个构造方法 分别给三个属性赋值。构造出一个WuMingFen类的对象(酸辣面码、2两、带汤),
# 2)写一个普通方法check()打印对象的三个属性。通过对象调用此方法。
class WuMingFen:
    def __init__(self, m: str, q: int, s=bool):
        self.theMa = m
        self.quantity = q
        self.isSoup = s


    def check(self):
        c = '带汤' if self.isSoup == True else "不带汤"
        print(f"面码:{self.theMa}, 粉的分量:{self.quantity}两,  是否带汤: {c}")

wumingfen = WuMingFen("酸辣面码",2,True)

wumingfen.check()



#三、摆放家具
# 需求:
# 1)房子有户型,总面积和家具名称列表
# ?? ?新房子没有任何的家具
# 2)家具有名字和占地面积,其中
# ?? ?床:占4平米
# ?? ?衣柜:占2平面
# ?? ?餐桌:占1.5平米
# 3)将以上三件家具添加到房子中
# 4)打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表
class Home:
    def __init__(self,t,z):
        self.home_type = t
        self.all_spaces = z
        self.free_spaces = z
        self.jiaju_list = []


    def __str__(self):
        return f"户型:{self.home_type},总面积:{self.all_spaces},剩余面积:{self.free_spaces},家具名称列表:{self.jiaju_list}"

    def add_jiaju(self,jiaju2):
        if self.free_spaces < jiaju2.use_area:
            print("%s家具面积太大,无法添加" % (jiaju2.name))
        self.jiaju_list.append(jiaju2.name)
        self.free_spaces -= jiaju2.use_area


class Jiaju:
    def __init__(self,name,use_area):
        self.name = name
        self.use_area = use_area

    def __str__(self):
        return f"{self.name}家具使用面积为{self.use_area}"


bed = Jiaju('bed', 4)
print(bed)
closet = Jiaju('closet', 2)
print(closet)
desk = Jiaju('desk', 1.5)
print(desk)

Home = Home("花园洋房",150)
Home.add_jiaju(bed)
Home.add_jiaju(closet)
Home.add_jiaju(desk)
print(Home)


#四、需求:
#      1)士兵瑞恩有一把AK47
#      2)士兵可以开火(士兵开火扣动的是扳机)
#      3)枪 能够 发射子弹(把子弹发射出去)
#      4)枪 能够 装填子弹 --增加子弹的数量
class shibin:
    def __init__(self,name,gunobject):
        self.name = name
        self.gun = gunobject

    def fire(self):
        if self.gun == []:
            print(f"士兵{self.name}没有枪支")
            return
        print(f"{self.name}快装子弹")
        self.gun.add_zidan(50)
        self.gun.fashe()

class gun:
    def __init__(self, name):
        self.name = name
        self.zidannum = 0

    def fashe(self):
        if self.zidannum <=0:
            print(f"{self.name}没有子弹了")
            return
        self.zidannum -=1
        print(f"{self.name}枪支啪啪啪。。。。")

    def add_zidan(self, num):
        self.zidannum += num

ak47 = gun(name="ak47")
ruien = shibin("ruien",ak47)
ruien.fire()


#五、多态:
#编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。
# 实现思路及关键代码:
# 1)定义乐器类Instrument,包括makeSound()方法,此方法中乐器声音:"乐器发出美妙的声音!"
# 2)定义乐器类的子类:二胡Erhu、钢琴Piano和小提琴Violin
#     二胡Erhu声音:"二胡拉响人生"
#     钢琴Piano声音:"钢琴美妙无比"
#     小提琴Violin声音:"小提琴来啦"
# 3)用main类,多态的方式对不同乐器进行切换
class Instrument:
    def makeSound(self):
        print("乐器发出美妙的声音")


class Erhu(Instrument):
    def makeSound(self):
        print("二胡拉响人生")

class Piano(Instrument):
    def makeSound(self):
        print("钢琴美妙无比")

class Violin(Instrument):
    def makeSound(self):
        print("小提琴来啦")

def music(object):
    object.makeSound()

eh = Erhu()
po = Piano()
vl = Violin()

music(vl)
music(po)
music(eh)

'''
封装是面向对象编程的一大特点。
面向对象编程的第一步:将属性和方法封装到一个抽象的类中,外界使用类创建对象,然后让对象调用方法,对象方法
的细节都被封装在类的内部
'''

'''
需求:小明爱跑步
1、小明体重75.0公斤;
2、每次跑步会减肥0.5公斤;
3、每次吃东西体重会增加1公斤;
4、小美的体重是45.0公斤;
'''

class People:
    def __init__(self,name,weight):
        self.name = name
        self.weight = weight

    def to_run(self):
        self.weight -= 0.5

    def to_eat(self):
        self.weight += 1

xiaoming = People(name="xiaoming",weight=75)
xiaomei = People(name="xiaomei",weight=45)
xiaomei.to_eat()
xiaomei.to_run()
print(xiaomei.weight)

 

posted @ 2021-07-29 15:56  美女爱找茬  阅读(1929)  评论(0编辑  收藏  举报