2017-08-23 74 views
0

需要您的幫助。有一個由類對象組成的列表(數組),如何找到列表中的項目(行),例如:手機還是名字?我有一個功能findByNamefindByPhone他們不工作!在對象列表中查找行

class Database: 
    name = 'n/a' 
    phone = 'n/a' 
    list = [] 
    copy_list = [] 

    class Rec: 
     def __init__(self, nam, phon): 
      self.name = nam 
      self.phone = phon 
     def __str__(self): 
      return "%s, %s" % (self.name, self.phone) 
    def __init__(self, fileName): 
     pass 
    def addRecord(self, name, phone): 
     self.list.append(Database.Rec(name,phone)) 
    def findByName(self, name): 
     res = self.findSubStr(name) 
     if len(res) == 0: 
      print ("Sorry, nothing match in names for " + name) 
     return res 
    def findByPhone(self, phone): 
     res = self.findSubStr(phone) 
     if len(res) == 0: 
      print ("Sorry, nothing match in phones for " + phone) 
     return res 
    def findSubStr(self, substr): 
     res = [] 
     for el in self.list: 
      if substr in self.list: 
       res.append(el) 
     return res 
def fun_input(): 
    print ("Please enter the name") 
    name = raw_input() 
    print ("Please enter phone number") 
    phone = raw_input() 
    db.addRecord(name, phone) 
def fun_output(): 
    db.out() 
def fun_find(): 
    print ("Please choose an option for which you want to search:") 
    print ("1 - Find for name") 
    print ("2 - Find for phone number") 
      ph = int(raw_input()) 
      if ph == 1: 
      print ("Please enter the name for find:") 
      phName = raw_input() 
      db.findByName(phName) 
     if ph == 2: 
      print ("Please enter the phone number for find:") 
      phPhone = raw_input() 
      db.findByPhone(phPhone) 
+1

縮進需要修復,但這與您陳述的問題無關。在修改縮進之後,你的代碼是兩個類,但是你如何使用你的函數?我沒有提示輸入和輸出。 – davedwards

回答

0

你有一個Rec的列表,它有兩個字段,名稱和電話。但是您正在搜索,就好像列表是可能是電話號碼或名稱的項目列表(檢查substr是否在列表中,它是否是列表中的項目?)。

我認爲你在這裏有一個錯誤:

for el in self.list: 
     if substr in self.list: 
      res.append(el) 

,爲什麼你會遍歷列表中的所有項目,然後對每一個,忽略它並檢查SUBSTR是否在(!) self.list?如果你正在檢查substr是否在self.list中(我認爲這不正確),那麼你不需要循環。如果你正在循環,那麼對於self.list中的每個el,你都想用el來做些事情。

也許你的意思是這樣的:

for el in self.list: 
     if substr in el: 
      res.append(el) 

但我不認爲作品。

在我看來,你需要的電話和姓名不同的功能。對於手機,您將擁有:

for el in self.list: 
     if substr == el.name: 
      res.append(el) 

類似的手機。

+0

是的,你說得對,代碼: '爲EL在self.list: 如果SUBSTR在El: res.append致發光(EL)' 不工作,我得到了一個錯誤:在findSubStr如果SUBSTR在El:類型錯誤:類型 '實例' 的說法是沒有迭代 如果我使用的代碼:在self.list '爲EL: 如果SUBSTR在self.list: res.append致發光(EL)' 他們什麼搜索!我按你說的做了,它工作!非常感謝你! 非常好,有這樣的網站是高度熟練的程序員分享他們的經驗和知識! –

+0

很高興幫助!對我來說也是鼓舞人心的,因爲我對Python的興趣遠遠超過我工作的其他語言;鼓勵我知道我已經學會了一些東西:-) – Basya