2017-05-20 23 views
1

我有兩個不同的類和兩個來自同一類的方法有點問題。我有一個B類,它使用了類似於這兩個方法似乎工作正常。 然而,問題在於類a(插入)的第一個方法更改了此類的第二個方法(查找)應該使用的列表。它使用的全局列表仍然只以零開始。所以我不知道如何告訴方法使用插入方法的HashMap:/我希望有人能幫助,謝謝!Python - 從另一個類方法獲取列表

""" PUBLIC MEMBERS 

Insert the given key (given as a string) with the given value (given as 
an integer). If the hash table already contains an entry for the given key, 
update the value of this entry with the given value. 
""" 

class Map: 
    global m 
    m = 10000 
    global HashMap 
    HashMap = [] 
    for i in range(m): 
     HashMap.append(0) 

    @classmethod 
    def insert(self, key, value): 

     """ 
     >>> Map.insert("hi", 9) 
     [4,53] 
     """ 
     self.key = key 
     self.value = value 


     asci = 0 
     for i in key: 
      asci += ord(i) 
     hashindex = (asci%m)*2 
     print(hashindex) 
     print(HashMap[hashindex]) 

     if HashMap[hashindex] == key: 
      HashMap[hashindex + 1] = value 

     else: 
      while HashMap[hashindex] != 0: 
       hashindex = ((asci+1)%m)*2 


      HashMap[hashindex] = key 
      HashMap[hashindex+1] = value 



    """ Check if there exists an entry with the given key in the hash table. 
    If such an entry exists, return its associated integer value. 
    Otherwise return -1. 
    """ 

    @classmethod 
    def lookup(self, key): 

     self.key = key 
     ascilookup = 0 
     for i in key: 
      ascilookup += ord(i) 

     indexlookup = (ascilookup%m)*2 


     for j in HashMap: 
      if HashMap[j]==key: 
       return HashMap[j + 1] 

      elif HashMap[j]==0: 
       return "-1" 

      else: 
       j =((j+1)%m)*2   



if __name__ == "__main__": 
    import doctest 
    doctest.testmod() 
+0

你爲什麼要使用一個列表來替換一個hashmap?使用[字典](https://learnpythonthehardway.org/book/ex39.html) – pointerless

回答

0

這是蟒蛇一個簡單得多的實現的地圖:

class Map: 
    HashMap = {} 

    def __init__(self,leng): 
     for i in range(leng): 
      self.HashMap[str(i)]=0 

    def insert(self, key, value): 
     self.HashMap[key]=value 


    def lookup(self, key): 
     for each in self.HashMap.iterkeys(): 
      if each == key: 
       return self.HashMap[each] 
     return None 

編輯不使用字典,用兩個列表比較容易:

class Map: 
    keys = [] 
    values = [] 

    def __init__(self,leng): 
     for i in range(leng): 
      self.keys.append(str(i)) 
      self.values.append(0) 

    @classmethod 
    def insert(self, key, value): 
     self.keys.append(key) 
     self.values.append(value) 

    @classmethod 
    def lookup(self, key): 
     for x in range(0, len(self.keys)): 
      if self.keys[x] == key: 
       return self.values[x] 
     return None 
+0

謝謝,問題是,我不允許使用內部字典:/ – Kuroskai

+0

啊,這就解釋了它。也許使用2個列表? – pointerless

+0

我已經添加了第二個解決方案而不使用字典 – pointerless

相關問題