input: Write a python function to generate a password with at least 8 characters, including at least one lowercase, one uppercase, and one non-alphanumeric character.
  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 in string.punctuation for c in generate_password())
output: import random
  import string
  
  def generate_password():
      lower = random.choice(string.ascii_lowercase)
      upper = random.choice(string.ascii_uppercase)
      special = random.choice(string.punctuation)
      other_chars = random.choices(string.ascii_letters + string.digits + string.punctuation, k=5)
      password = lower + upper + special + ''.join(other_chars)
      password = ''.join(random.sample(password, len(password)))  # Shuffle the password to ensure random order
      return password