'Why isn't the count for lives going down my pygame code?

So I am doing a project where I have to make a game that gives the user three lives and each time the beamrect's rectangle collides with the player's, it subtracts a life and puts them in the original position. When lives == 0: there will be a death screen displayed. But for some reason, the death screen isn't being displayed even though I made sure that every time the player rect (being zonicrect) and the beamrect collided, it would subtract 1 from the life variable.

# Your header should go here, each comment should be initialed -DK
import pygame, sys
import os
# https://youtu.be/jO6qQDNa2UY
pygame.init()
FPS = 60
# Useful Variables
  # Size

size = height, width = 900, 500
zonhw = zheight, zwidth = 70, 70
scale2 = height2, width2 = 600, 300
lscale = lheight, lwidth = 80, 80
beamsz = bheight, bwidth = 50,25
platz = pheight, pwidth = 10, 70
  # RGB 
white = (255, 255, 255)
black = (0,0,0)
blue = (0, 0, 128)
green = (0, 255, 0)
brown = (165,42,42)
  # Speed
VEL = 5
beamspeed = 3
  # Position
laserpos = posx, posy = 500,250
  #other
i = 0
life = 3
score = 0


# graphics
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Zonic bootleg")
font = pygame.font.Font('freesansbold.ttf', 32)
zonic = pygame.image.load(os.path.join("image","zonic.gif"))
zonic = pygame.transform.scale(zonic, zonhw)
bg =  pygame.image.load(os.path.join("image","sonic-back.jpg"))
bg = pygame.transform.scale(bg, size)
gg = pygame.image.load(os.path.join("image","gg.jpg"))
gg= pygame.transform.scale(gg, size)
lazerz = pygame.image.load(os.path.join("image","Lazerz.gif"))
lazerz = pygame.transform.scale(lazerz, lscale)
beam = pygame.image.load(os.path.join("image","laserbeam.jpg"))
beam = pygame.transform.scale(beam, beamsz)
lives = pygame.image.load(os.path.join("image","health.png"))
lives = pygame.transform.scale(lives,(40,40))
# zoncz = pygame.image.load(os.path.join("image","zoncz.png"))
# zoncz = pygame.transform.scale(zoncz, scale2)




#coalitions 
def collider(life,beamrect,zonicrect,lazerect): 
  beamrect.x -= beamspeed
  if zonicrect.colliderect(beamrect):
    beamrect.x = lazerect.x+21
    zonicrect.x = 0
    
  if beamrect.x <-60:
    #screen.blit(beam, (posx, posy))
    beamrect.x += 550
  
def updating(score, beamrect):
  if beamrect.x == 0:
    score += 1



#Death
def death():
  while life <= 0:
    death = font.render("Death", True, white)
    screen.fill(black)
    screen.blit(death,(250, 250))
  
# zonic movement
def KWS(keyvar, zonicrect,flip):
  
  if keyvar[pygame.K_RIGHT]:  # right
    zonicrect.x += VEL
    flip = False
  if zonicrect.x > 500:
    zonicrect.x -= VEL
    
  if keyvar[pygame.K_LEFT] and zonicrect.x + VEL > 0:  # left
    zonicrect.x -= VEL
    flip = True
  
def flipx(flip,zonicrect):
  if flip:
    screen.blit(pygame.transform.flip(zonic,True,False),(zonicrect.x,zonicrect.y))
  if flip == False:
      screen.blit(pygame.transform.flip(zonic,False,False),(zonicrect.x,zonicrect.y))

  

    
# text = font.render('Lives: {0}'.format(life), True, green, blue)
def heart(beamrect,zonicrect,lazerect):
    x = 1
    i = -33
    while life >= x:
      x +=1 
      i+=32
      screen.blit(lives, (2+i,0))

# draw
def drawingfunc(zonicrect,lazerect, beamrect,flip, zonczrect):
    #screen.blit(death,(0,0))
    screen.blit(bg, (0, 0))
    heart(beamrect,zonicrect,lazerect)
    flipx(flip,zonicrect)
    #screen.blit(zonic,(zonicrect.x, zonicrect.y))
    screen.blit(beam, (beamrect.x, beamrect.y+15))
    screen.blit(lazerz, (lazerect.x+21,lazerect.y))
    # score = font.render('Score: ') 
    # screen.blit(zonic, (zonczrect.x, zonczrect.y))
    sore = font.render("Score: {0}".format(score), True, black, white)
    screen.blit(sore, (30, 70))
    pygame.draw.rect(screen, brown, pygame.Rect(200, 200, 100, 50))
    pygame.display.update()


   
          


# mainloop and refresh rate
def main():
    jump = False
    jumpCount = 0
    jumpMax = 15
    flip = False
    zonicrect = pygame.Rect(10, 250, zheight, zwidth)
    lazerect = pygame.Rect(posx, posy, lheight, lwidth)
    beamrect = pygame.Rect(posx, posy, bheight, bwidth)
    zonczrect = pygame.Rect(50, 25, height2, width2)
    
    # (30,0,32,32)
    # livesrect = pygame.Rect(0,0,10,10)
    
    
    
      
    
    clock = pygame.time.Clock()
    run = True
    while run:
        clock.tick(FPS)
         
        
        
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
            if event.type == pygame.KEYDOWN:
              if not jump and event.key == pygame.K_SPACE:
                  jump = True
                  jumpCount = jumpMax 
  
        
        death()
        collider(life,beamrect,zonicrect,lazerect)
        keyspressed = pygame.key.get_pressed()
        KWS(keyspressed, zonicrect,flip)
        updating(score, beamrect)        
        drawingfunc(zonicrect,lazerect, beamrect,flip, zonczrect)
        flipx(flip, zonicrect)
        
        if jump:
            zonicrect.y -= jumpCount
            if jumpCount > -jumpMax:                                                              
              jumpCount -= 1                                                              
            else:
              jump = False

    pygame.quit()                                                              
                                                              

# calling function NOTE: needs to always be at the end of file
if __name__ == "__main__":
  main()


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source