class Student: def __init__(self, number, name, email): self.number = number self.name = name self.email = email self.MAX_HASH =100000 def __str__(self): return f"Student: {self.name} ({self.email}, {self.number})" def __hash__(self): return (id(self.number) + id(self.name) + id(self.email)) % self.MAX_HASH class HashTable: def __init__(self, elements): self.bucket_size = len(elements) * 3 self.buckets = [[] for i in range(self.bucket_size)] self._assign_buckets(elements) self.insertion_order = [] def __iter__(self): ret_list = [] for index, obj_id in self.insertion_order: for obj in self.buckets[index]: if id(obj) == obj_id: ret_list.append(obj) return iter(ret_list) def _assign_buckets(self, elements): for obj in elements: hashed_value = hash(obj) index = hashed_value % self.bucket_size self.buckets[index].append(obj) self.insertion_order.insert((index, id(obj))) def get_value(self,input_key): return self.buckets[input_key] def main(): arthur = Student("097", "Arthur", "artur@blade.hex") eleanor = Student("098", "Eleanor", "eleano@plague.hex") aoi = Student("099", "Aoi", "aoi@magnet.hex") hash_table = HashTable([arthur,eleanor,aoi])