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)
三十六般武艺,七十二般变化,修练出个人品牌并发出光芒