• Strangest assertion error ever

Question related to mission Army Battles

 

Here is my code.

class Warrior:

def __init__(self):
    self.health = 50
    self.attack = 5

@property
def is_alive(self):
    return self.health>=0

class Knight(Warrior):

def __init__(self):
    self.health = 50
    self.attack = 7

def fight(unit_1, unit_2):

while unit_1.is_alive and unit_2.is_alive:
    unit_2.health = unit_2.health - unit_1.attack
    if unit_2.health > 0:
        unit_1.health = unit_1.health - unit_2.attack

return unit_1.is_alive    

class Army:

def __init__(self):
    self.units = []

def add_units(self,unit,quantity):      
    for i in range(quantity):
        self.units.append(unit())

def del_units(self):
    self.units = self.units[1:]

class Battle:

def __init__(self):
    pass  
def fight(self, army1, army2):    
    print([HP.health for HP in army1.units],[HP.health for HP in army2.units])
    if fight(army1.units[0], army2.units[0]):            
        army2.del_units()
    else:
        army1.del_units()

    if len(army1.units)>0 and len(army2.units)>0: 
        self.fight(army1, army2)
    else:
        print(len(army1.units)==0)
        return len(army1.units)==0

While checking with

army_1.add_units(Warrior, 1)  and army_2.add_units(Warrior, 2)

I got the assertion error: result:null, should be False. However, explicitly checking the return result of the battle.fight function I do see False. What is actually happening?