麦子学院——Python面向对象编程(P9类的继承与方法重载)

题目

(一)

通过继承实现一台可灭菌的洗衣机

(二)

修改刚才解析的游戏,为精灵添加能量,并每次相遇时各自损失一定的能量。耗尽后游戏结束。

答案

(一)

class Washer:
    company = "Le Xi"
    def __init__(self, water=10, scour=2):
        self._water = water
        self.scour = scour

    @staticmethod
    def spins_ml(spins):
        return spins * 0.4

    @classmethod
    def get_washer(cls, water, scour):
        return cls(water, cls.spins_ml(scour))

    @property
    def water(self):
        return self._water

    @water.setter
    def water(self, water):
        if 0 < water <=500:
            self._water = water
        else:
            print("set Failure!")

    def set_scour(self, scour):
        self.scour = scour

    def add_water(self):
        print("Add water:",self.water)

    def add_scour(self):
        print("Add scour:",self.scour)

    def start_wash(self):
        self.add_water()
        self.add_scour()
        print("Start wash...")

class DisinfaWasher(Washer):

    def sterilize(self):
        print("sterilize clothes...")

(二)

import random

class Sprite:

    step = [-2, 2, -3, 3]

    def __init__(self, gm, point=None, energy=10):
        self.gm = gm
        if point is None:
            self.point = random.randint(0,20)
        else:
            self.point = point
        self.energy = energy    # 能量

    def jump(self):
        astep = random.choice(Sprite.step)
        if 0 <= self.point + astep <=20:
            self.point += astep

    def deterio(self):  # 能量损耗
        self.energy -= 1
class Ant(Sprite):

    def __init__(self, gm, point=None, energy=10):
        super().__init__(gm, point, energy)
        self.gm.set_point("ant", self.point)

    def jump(self):
        super().jump()
        self.gm.set_point("ant", self.point)

class Worm(Sprite):

    def __init__(self, gm, point=None, energy=10):
        super().__init__(gm, point, energy)
        self.gm.set_point("worm", self.point)

    def jump(self):
        super().jump()
        self.gm.set_point("worm", self.point)

class GameMap:

    def __init__(self):
        self.ant_point = None
        self.worm_point = None

    def catched(self):
        print("ant:", self.ant_point, "worm:", self.worm_point)
        if self.ant_point is not None and self.worm_point is not None \
                and self.ant_point == self.worm_point:
            return True

    def set_point(self,src,point):
        if src == "ant":
            self.ant_point = point
        if src == "worm":
            self.worm_point = point

测试

(一)

if __name__ == "__main__":
    a = DisinfaWasher(13,14)
    a.start_wash()  #Add water: 13
                    #Add scour:14
                    #Start wash...
    a.sterilize()   #sterilizing clothes...

(二)

if __name__ == "__main__":
    gm = GameMap()
    worm = Worm(gm=gm, energy=10)
    ant = Ant(gm=gm, energy=12)
    while ant.energy != 0 and worm.energy != 0:
        if gm.catched():
            ant.deterio()
            worm.deterio()
        print("ant_energy:", ant.energy, "worm_energy:", worm.energy)   # 打印能量
        worm.jump()
        ant.jump()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值