input: Write a function to generate a random password of length 8 characters, containing at least one lowercase letter, one uppercase letter, and one number. If the generated password does not meet these criteria, the function should regenerate the password until it does. If the input is empty, the function should still generate a valid password.
  from random import choice
  import string
  
  def generate_password():
      chars = string.ascii_uppercase + string.ascii_lowercase + string.digits
      password = ''.join(choice(chars) for i in range(8))
      if any(c.islower() for c in password) and any(c.isupper() for c in password) and any(c.isdigit() for c in password):
          return password
      else: 
          return generate_password()
  
  assert generate_password() != generate_password()
  assert len(generate_password()) == 8
  assert any(c.islower() for c in generate_password())
  assert any(c.isupper() for c in generate_password())
  assert any(c.isdigit() for c in generate_password())
  assert generate_password() != ""
  assert isinstance(generate_password(), str)
  assert generate_password() != None
output: 
  from random import choice
  import string
  
  def generate_password():
      chars = string.ascii_uppercase + string.ascii_lowercase + string.digits
      password = ''.join(choice(chars) for i in range(8))
      if any(c.islower() for c in password) and any(c.isupper() for c in password) and any(c.isdigit() for c in password):
          return password
      else: 
          return generate_password()
  