2016-04-01 45 views
0

Ben doğrusal problama ile farklı boyutlarda hash tabloları oluşturmak için bir program yazıyorum. lineer benim ADT sondalama ben bir işlev def aşağıdaki işlevinden benim ana komut denir) (insert var:Python: "Nonetype 'yinelenebilir değil" yineleme olmadan

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

kendisi insertHashTable dan adlandırılan bu işlevinden olan hata()

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 

Bu kodun ikinci satırında yazım hatası alıyorum.

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 

ben anahtarla oluyor hiçbir yineleme var gibi görerek, böyle bir hata insertHashTable() fonksiyonunda olacağını niçin emin değilim: Son olarak, _findSlot() şudur.

Bununla birlikte, hashtable'ımın, tabloyu başlatırken her yuvada 'Yok' olduğunu biliyorum, belki bununla ilgili bir sorun olabilir mi?

+0

(c + başlangıçLoc) <(self._size -1), ilk yinelemede Yanlış olabilir ve bunun için bir iade belgeniz yoktur. Sanırım bu davayı düşünmedin. – FatmaT

cevap

3

_findSlot(self, key) işleviniz, dönüş ifadesi olmadan tamamlanabilir. (Bu, while durumunuzun yanlış hale gelmesi ve döngü bittiğinde bu durum gerçekleşir.) Bu durumda, işlev None döndürecektir. (found, slot) değerini None değerini denerseniz ve atarsanız, Nonetype is not iterable hatasını alırsınız.

Muhtemelen None döndüğü durumda, işlevinizin ne zaman döndürülmesi gerektiğini tahmin etmeniz gerekir.