Я пытался написать метод insert(self, key):
для моего класса MyHashTable:
.Python Hash: метод ввода
Предполагается использовать линейное зондирование для обработки разрешения столкновения. Если ключ уже находится в таблице, тогда метод возвращает -2
. Если ключ еще не находится в таблице и существуют пустые слоты, то ключ вводится в пустой номер слота, возвращаемый hash_function
, и этот номер слота возвращается. Если ключ не находится в хеш-таблице и нет пустых слотов, он возвращает -1
.
Вот мой класс:
class MyHashTable:
def __init__(self, capacity):
self.capacity = capacity
self.slots = [None] * self.capacity
def __str__(self):
return str(self.slots)
def __len__(self):
count = 0
for i in self.slots:
if i != None:
count += 1
return count
def hash_function(self, key):
i = key % self.capacity
return i
def insert(self, key):
slot = self.hash_function(key)
if key in self.slots[slot]:
return -2
elif key in self.slots[slot] == False:
return -1
else:
self.slots[slot].append(key)
return slot
Тест:
x = MyHashTable(2)
print("Add 3, return:", x.insert(3))
print("Hashtable:", x)
print("Add 3, return:", x.insert(3)) #duplicate
print("Hashtable:", x)
Результат должен быть:
Add 3, return: 1
Hashtable: [None, 3]
Add 3, return: -2
Hashtable: [None, 3]
Я попробовал несколько методов, но получаю ошибку. «Nonetype» не является итерируемым.
В коде отсутствует метод вставки. Это затрудняет диагностику проблемы, с которой вы сталкиваетесь :-) – paxdiablo
Да. Мне нужно написать один ..... – Newbie
Вы не получите «NoneType не итерируется» из этого добавленного кода, 'pass' не имеет привычки итерации случайных коллекций :-) Я предлагаю вам добавить одну из ваших попытки. – paxdiablo