Python练习:自定义类

题目1

假设您是一位 领主,要去西方圣域, 但是路途上会碰到 两种凶残的妖怪: 鹰妖 和 狼妖。

于是您在去之前 要用自己的全部 灵石积蓄 去雇佣 两种战士:弓箭兵 或者 斧头兵

弓箭兵、 斧头兵、 狼妖、鹰妖 具有如下特征

弓箭兵:

    雇佣价: 100 
    最大生命值: 100
    杀伤力 
        对战鹰妖  : 伤敌生命值 30  ,  自损生命值 10
        对战狼妖  :  伤敌生命值 20  ,  自损生命值 20
斧头兵:

    雇佣价: 120 
    最大生命值: 120
    杀伤力 
        对战鹰妖  : 伤敌生命值 10  ,  自损生命值 30
        对战狼妖  :  伤敌生命值 50  ,  自损生命值 10
鹰妖:

    最大生命值: 200
狼妖:

    最大生命值: 300

任何战士战斗负伤后,都可以用灵石疗伤, 消耗 1 灵石可以恢复生命值 1个点

任何妖怪战斗负伤后,也可以用灵石疗伤, 消耗 1 灵石可以恢复生命值 2个点

根据以上的说明,请定义 5个类 战士、弓箭兵 、斧头兵、鹰妖、狼妖。

答案与解析

















































题目1-答案


# 战士
class Warrior:

    # 初始化参数是生命值
    def __init__(self, strength):
        self.strength =  strength

    # 用灵石疗伤
    def healing(self, stoneCount):
        # 如果已经到达最大生命值,灵石不起作用,浪费了
        if self.strength == self.maxStrength:
            return

        self.strength += stoneCount
        
        # 不能超过最大生命值
        if self.strength > self.maxStrength:
            self.strength = self.maxStrength


# 弓箭兵 是 战士的子类
class Archer(Warrior):

    # 雇佣价 100灵石,属于静态属性
    price = 100

    # 最大生命值 ,属于静态属性
    maxStrength = 100

    # 初始化参数是生命值, 名字
    def __init__(self, strength, name='archer'):
        Warrior.__init__(self,strength)
        self.name = name

    # 和鹰妖战斗
    def fightWithEagle(self, eagle):
        self.strength -= 10
        eagle.strength -= 30

        
    # 和狼妖战斗
    def fightWithWolf(self, wolf):
        self.strength -= 20
        wolf.strength -= 20

# 斧头兵 是 战士的子类
class Axeman(Warrior):

    # 雇佣价 120灵石
    price = 120

    # 最大生命值
    maxStrength = 120

    # 初始化参数是生命值, 名字
    def __init__(self, strength, name='axeman'):
        Warrior.__init__(self,strength)
        self.name = name

    # 和鹰妖战斗
    def fightWithEagle(self,eagle):
        self.strength  -= 30
        eagle.strength -= 10

        
    # 和狼妖战斗
    def fightWithWolf(self,wolf):
        self.strength -= 10
        wolf.strength -= 50


# 妖怪
class Monster:

    # 初始化参数是生命值
    def __init__(self, strength):
        self.strength =  strength

    # 用灵石疗伤
    def healing(self, stoneCount):
        # 如果已经到达最大生命值,灵石不起作用,浪费了
        if self.strength == self.maxStrength:
            return

        self.strength += stoneCount*2
        
        # 不能超过最大生命值
        if self.strength > self.maxStrength:
            self.strength = self.maxStrength

# 鹰妖 是 妖怪的子类
class Eagle(Monster):
    
    # 最大生命值
    maxStrength = 200

    # 初始化参数是生命值
    def __init__(self, strength):
        Monster.__init__(self,strength)

        
    # 和弓箭手战斗
    def fightWithArcher(self,archer): 
        self.strength   -= 30
        archer.strength -= 10

    # 和斧头兵战斗
    def fightWithAxeMan(self,axeman): 
        self.strength -= 10
        axeman.strength -= 30


# 狼妖 是 妖怪的子类
class Wolf(Monster):
    # 最大生命值
    maxStrength = 300

    # 初始化参数是生命值
    def __init__(self, strength):
        Monster.__init__(self,strength)
        
    # 和弓箭手战斗
    def fightWithArcher(self,archer):   
        self.strength -= 20 
        archer.strength -= 20

    # 和斧头兵战斗
    def fightWithAxeMan(self,axeman): 
        self.strength -= 50  
        axeman.strength -= 10


# 实例化一个狼妖
wolf = Wolf(200)

# 实例化一个鹰妖
eagle = Eagle(200)

# 实例化一个弓箭兵
archer = Archer(100)

# 实例化一个斧头兵      
axeman = Axeman(100)


# 斧头兵大战狼妖
axeman.fightWithWolf(wolf)

# 斧头兵大战鹰妖
axeman.fightWithEagle(eagle)


# 弓箭兵大战狼妖
archer.fightWithWolf(wolf)

# 弓箭兵大战鹰妖
archer.fightWithEagle(eagle)

# 显示他们战斗后的生命值
print(eagle.strength,wolf.strength,archer.strength,axeman.strength)

# 弓箭兵 用 20灵石疗伤
archer.healing(20)
print(archer.strength)


# 鹰妖 用 100灵石疗伤
eagle.healing(1000)
print(eagle.strength)