Python: индекс списка вне диапазона для программы хэш-таблицы - PullRequest
0 голосов
/ 30 мая 2019

Не уверен, что этот код работает, и он показывает индекс вне диапазона, который я не знаю, как решить

class Hash():

    def __init__(self, user):
        self.max = user
        self.table = []

    def isFull(self):
        if len(self.table) == self.max:
            return True
        else:
            return False
    def insert(self,item):
        if self.isFull():
            print('Hash table is full')
        else:
            hashing = self.index(item)
            if self.table[hashing] == None:
                self.table[hashing] = item
            else:
                for a in range(len(self.table)):
                    if self.table[a] == None:
                        self.table[a] = item
        return self.table

    def index(self,item):
        hashval = int(item) % self.max
        return hashval


    def searching(self,item):
        pass

user = int(input('Enter a number for the maximum number of items that can be stored in the hash table: '))

Он говорит, что индекс находится вне диапазона из-за -> если self.table [хеширование] == Нет:

1 Ответ

0 голосов
/ 30 мая 2019
  1. Вы используете список вместо dict.Вам следует заменить self.table = [] на self.table = {}

  2. if self.table[hashing] == None:, если hashing not in self.table возникнет ошибка.Вы должны заменить его на: if hashing not in self.table:

  3. for a in range(len(self.table)): не будет проходить через self.table, потому что это не список.for a in self.table: будет работать.

Вот правильный код:

class Hash():

    def __init__(self, user):
        self.max = user
        self.table = {}

    def isFull(self):
        if len(self.table) == self.max:
            return True
        else:
            return False
    def insert(self,item):
        if self.isFull():
            print('Hash table is full')
        else:
            hashing = self.index(item)
            if hashing not in self.table:
                self.table[hashing] = item
            else:
                for a in self.table:
                    if self.table[a] == None:
                        self.table[a] = item
        return self.table

    def index(self,item):
        hashval = int(item) % self.max
        return hashval


    def searching(self,item):
        pass

user = int(input('Enter a number for the maximum number of items that can be stored in the hash table: '))
h = Hash(user)
h.insert(5)
h.insert(6)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...