题目1:车辆租赁计费系统
背景:实现不同车型的租赁费用计算。
- 父类
Vehicle包含私有属性_base_rate(日基础租金)和_rent_days(租的天数)。方法calculate_cost()返回基础租金×天数。 - 子类:
Car:额外收取每天50元保险费,重写calculate_cost()。Truck:基础租金×天数 + 每公里5元(公里数作为额外参数传入),因此重写calculate_cost(km)。
- 封装:
_base_rate只能通过构造函数设置,不能直接修改。提供set_rent_days()方法修改租车的天数。 - 创建Car和Truck对象测试
classVehicle:def__init__(self,base_rate,rent_days):self._base_rate=base_rate self._rent_days=rent_daysdefcalculate_cost(self):returnself._base_rate*self._rent_daysdefset_rent_days(self,rent_days):self._rent_days=rent_daysclassCar(Vehicle):defcalculate_cost(self):returnsuper().calculate_cost()+50*self._rent_daysclassTruck(Vehicle):def__init__(self,base_rate,rent_days,km):Vehicle.__init__(self,base_rate,rent_days)self.km=kmdefcalculate_cost(self):returnsuper().calculate_cost()+5*self.km# 测试c=Car(100,3)t=Truck(200,5,200)print("car的租金:",c.calculate_cost())print("trunk的租金:",t.calculate_cost())# lst = [c,t]# for i in lst:# print(i.calculate_cost())题目2:游戏角色职业系统
背景:RPG游戏中角色有多种能力来源。
要求:
- 创建三个基类:
- 战士
Fighter:包含属性__strength力量值、提供attack()方法输出“物理攻击” - 法师
Mage:包含属性__intelligence智力值、提供cast_spell()方法输出“火球术” - 医师
Healer:包含__wisdom智慧值、提供heal()方法输出“治疗术”。 - 每个类都有
get_power()方法返回不同数值(战士返回力量值,法师返回智力值等)。
- 战士
- 创建子类
Paladin(圣骑士)同时继承Fighter和Healer,重写get_power()为(力量×0.6 + 智慧×0.4)。并拥有自己的holy_light()技能(输出“圣光普照”)。 - 创建子类
Spellblade(魔剑士)同时继承Fighter和Mage,重写get_power()为(力量×0.5 + 智力×0.5),重写attack()为先施放一个附加魔法效果再物理攻击(调用两个父类对应方法)。 - 多态:定义一个函数
show_power(character),调用其get_power()。演示不同角色传入时得到不同计算方式。 - 封装:每个角色的力量/智力等属性设为私有,通过getter访问。
# 战士classFighter:def__init__(self,strength):self.__strength=strengthdefattack(self):print("物理攻击")defget_power(self):returnself.__strength@propertydefstrength(self):returnself.__strength# 法师classMage:def__init__(self,intelligence):self.__intelligence=intelligencedefcast_spell(self):print('火球术')defget_power(self):returnself.__intelligence@propertydefintelligence(self):returnself.__intelligence# 医师classHealer:def__init__(self,wisdom):self.__wisdom=wisdomdefheal(self):print("治疗术")defget_power(self):returnself.__wisdom@propertydefwisdom(self):returnself.__wisdom# 创建子类# 圣骑士classPaladin(Fighter,Healer):def__init__(self,strength,wisdom):# 分别调用不同父类的初始化方法,为从不同父类继承的实例属性初始化Fighter.__init__(self,strength)Healer.__init__(self,wisdom)defget_power(self):returnself.strength*0.6+self.wisdom*0.4defholy_light(self):print("圣光普照")# 魔剑士classSpellblade(Fighter,Mage):def__init__(self,strength,intelligence):Fighter.__init__(self,strength)Mage.__init__(self,intelligence)defget_power(self):return(self.strength+self.intelligence)*0.5defattack(self):Mage.cast_spell(self)Fighter.attack(self)# 测试defshow_power(character):print("能力:",character.get_power())p=Paladin(1000,90)s=Spellblade(2000,100)show_power(p)show_power(s)p.attack()s.attack()