2016-11-22 140 views
-3

我正試圖用函數更新客戶端的詳細信息。但它不起作用。我調試程序,我意識到它永遠不會進入if。我不知道爲什麼?跳過if語句循環的程序

這是函數:

def UpdateClient(self,id,cnp,name,adress): 
    for i in range (len(self.clients.get_all())): 
     if self.clients.get_all()[i].get_id==id: 
      self.clients.get_all()[i].set_name(name) 
      self.clients.get_all()[i].set_cnp(cnp) 
      self.clients.get_all()[i].set_adress(adress) 

當我嘗試更新客戶端,我給idnamecnpadress,但是當我打印的清單不會發生任何變化。我不能用調試器進入if,因爲它表示它們永遠不會相等。爲什麼?

+2

'self.clients.get_all()[i] .get_id()'? – RomanPerekhrest

+0

以及我如何改變它? – Mary

+1

'get_id'聽起來像一個函數。也許它應該是'.get_id()== id'? –

回答

3

這裏的問題是你讓你的checkget_id == id,但它是一個函數。你if應該是這樣的:

if self.clients.get_all()[i].get_id()==id: 
#         ^making it a function call 

此外,更好的方式來做到這一點是由一個獨立的變量存儲self.clients.get_all()。因此,你的代碼應該是這樣的:

def UpdateClient(self,id,cnp,name,adress): 
    clients = self.clients.get_all() 
    for i in range (len(clients)): 
     if clients[i].get_id()==id: 
      clients[i].set_name(name) 
      clients[i].set_cnp(cnp) 
      clients[i].set_adress(adress) 
+0

'get_id'應該是方法調用,那是個問題 –

+0

這不能解決所有問題......儘管可能有一些事實,但您需要解釋爲什麼您認爲這是正確的解決方案(作爲一個旁白,我認爲您的關於get_all的隨機順序的假設可能有缺陷) –

+0

如果你只是隨機地去猜測API,你應該把它作爲評論而不是答案。 –

5

注意get_id是不一樣的get_id()。前者引用該方法,而後者實際上稱之爲方法。

另外,考慮通過編寫更多的慣用Python來簡化你的代碼。例如:

for client in self.clients.get_all(): 
     if client.get_id() == id: 
      client.set_name(name) 
...