input: Write a function to implement a hash table in Python that supports insert, delete, and retrieve operations. If the key exists in the hash table during retrieve, return the corresponding value. If the key does not exist, return None.
  
  class HashTable:
      def __init__(self):
          self.table = [[] for _ in range(256)]
   
      def insert(self, key, value):
          h = hash(key) % 256
          for i, kv in enumerate(self.table[h]):
              if kv[0] == key:
                  self.table[h][i] = (key, value)
                  return
          self.table[h].append((key, value))
   
      def retrieve(self, key):
          h = hash(key) % 256
          for kv in self.table[h]:
              if kv[0] == key:
                  return kv[1]
          return None
   
      def delete(self, key):
          h = hash(key) % 256
          for i, kv in enumerate(self.table[h]):
              if kv[0] == key:
                  del self.table[h][i]
                  return
  
  hash_table = HashTable()
  hash_table.insert("apple", 5)
  hash_table.insert("banana", 10)
  hash_table.insert("cherry", 15)
  
  assert hash_table.retrieve("apple") == 5
  assert hash_table.retrieve("banana") == 10
  assert hash_table.retrieve("cherry") == 15
  assert hash_table.retrieve("date") is None
  
  hash_table.delete("banana")
  assert hash_table.retrieve("banana") is None
output: def __init__(self):
      self.table = [[] for _ in range(256)]
  
  def insert(self, key, value):
      h = hash(key) % 256
      for i, kv in enumerate(self.table[h]):
          if kv[0] == key:
              self.table[h][i] = (key, value)
              return
      self.table[h].append((key, value))
  
  def retrieve(self, key):
      h = hash(key) % 256
      for kv in self.table[h]:
          if kv[0] == key:
              return kv[1]
      return None
  
  def delete(self, key):
      h = hash(key) % 256
      for i, kv in enumerate(self.table[h]):
          if kv[0] == key:
              del self.table[h][i]
              return