2016-04-01 38 views
0

私は線形プロービングでさまざまなサイズのハッシュテーブルを作成するプログラムを書いています。 エラー自体はinsertHashTable(から呼び出されたこの関数からですPython: "'Nonetype'は反復処理なしで反復不可能です

def insertHashTable( loadNum, hashTable ): 
    i = 0 
    while i < ((loadNum*size)-1): 
     hashTable.insert(data[i],data[i]) 
     i = i + 1 
    return hashTable 

:私はDEF(挿入機能を持っている探査線形のための私のADTで)次の関数からの私のメインのスクリプトから呼び出されます
def insert(self, key, value): 
    (found, slot) = self._findSlot(key) #ERROR HERE 
    if not found : 
     self._table[slot] = _MapEntry(key, value) #custom datatype 
     self._count += 1 
    return not found 

このコードの2行目に非タイプのエラーが表示されます。最後に、_findSlot()は以下の通りです:

def _findSlot(self, key):   
    startLoc = self._hash1(key) 

    self.slotsAccessed += 1 
    if self._table.__getitem__(startLoc) == None: 
     return (False, startLoc) 

    else: 
     c = 0 
     while (c+startLoc) < (self._size -1): 
      if self._table[startLoc+c] == None: 
       return (False, startLoc+c) 
      elif self._table.__getitem__(startLoc).key == key: 
       return (True, startLoc+c) 
      c = c + 1 
      self.slotsAccessed += c 

私はキーで起こって何の反復がないので見て、insertHashTable()関数でこのようなエラーが存在することになる理由はわかりません。

私はハッシュテーブルがテーブルの初期化時にすべてのスロットに「なし」を持っていることは知っていますが、多分そこに問題がありますか?

+0

(c + startLoc)<(self._size -1)は、最初の反復では偽で、返されるケースはありません。あなたはその事件を考慮しなかったと思います。 – FatmaT

答えて

3

_findSlot(self, key)関数はreturn文なしで完了できます。 (具体的には、whileの条件がfalseになり、ループが終了した場合に発生します)。その場合、関数はNoneを返します。 (found, slot)に値Noneを割り当てようとすると、エラーNonetype is not iterableが返されます。

現在、Noneが返されている場合に関数が返すと思われるものを把握する必要があります。

関連する問題