2014-10-04 61 views
0

我們被要求設計一個GUI來計算最活躍和最不活躍的客戶。 底部有兩個按鈕,用於計算最活躍和最不活躍的客戶。 還有一個結果區域將顯示按下兩個按鈕的結果。Python編寫代碼以獲得最活躍的客戶和最少客戶

下面有一個列表框和兩個按鈕。名稱將顯示在列表框中。例如,當我在textCtrl第一號中輸入「sam」,然後點擊添加客戶按鈕。山姆會出現在列表框中。幾次輸入不同或相同的名稱後。名單列表是列表框。例如,列表框中有三個「sam」和兩個「justin」。當我點擊「最活躍的按鈕」時,名字山姆會出現在結果框中。當我點擊最少的活動按鈕時,名字justin將出現在結果框中。

我成功定義了添加客戶按鈕,但我不知道如何定義計算最活躍和最不活躍客戶的按鈕。有人告訴我我需要使用計數功能,但我不知道如何去做。

這是我走到這一步:

def addcustomer(self,event): 
    try: 
     name=str(self.m_textCtrl1.Value) 
     self.m_listBox1.Append(str(name)) 
    except: 
     wx.MessageBox("This can't be empty.") 

def mostactive(self,parent): 

有人可以幫助我的下一步是什麼? 謝謝! P.S.結果框中的名稱是m_textCtrl2 列表框中的名稱是m_listbox1

+0

「我們被要求設計一個圖形用戶界面」使它聽起來像你希望我們爲你完成作業。建議:**嘗試**編寫「mostactive」和「leastactive」方法,然後在代碼不完整的情況下分享您的代碼,我預測您將獲得更多幫助。我只是注意到你發佈了相同的問題4天前:http://stackoverflow.com/questions/26127280/python-calculate-the-most-and-the-least-active-customers – 2014-10-04 05:12:17

+0

def mostactive(self,parent): namescounter =計數器(self.m_listBox1.Append) 嘗試: 名= self.m_listBox1.Append self.m_textCtrl2.Value = namescounter.most_common(地名) 不同的是: wx.MessageBox(「這是行不通的。 「) – York 2014-10-04 15:59:21

+0

我再試一次。它不起作用...... :( – York 2014-10-04 15:59:41

回答

0

collections.Counter有越來越列表中最常見的物品真是方便的方法.most_common

>>> from collections import Counter 
>>> namesCounter = Counter(['Rod', 'Rod', 'Rod', 'Jane', 'Jane', 'Freddie']) 
>>> namesCounter.most_common(1) 
[('Rod', 3)] 

最小公項目可以這樣得到:

>>> [(k, min(namesCounter.values())) for k, v in namesCounter.iteritems() if v == min(namesCounter.values())] 
[('Freddie', 1)] 

......雖然這看起來有點不pythonic。

0

你可以修改你的代碼是這樣的:

customer = {} 

def addcustomer(self,event): 
    try: 
     name=str(self.m_textCtrl1.Value) 
     self.m_listBox1.Append(str(name)) 
     if name in customer: 
      customer[name] += 1 
     else: 
      customer[name] = 1 
    except: 
     wx.MessageBox("This can't be empty.") 

最終用戶詞典將會= { 'SAM':3, '賈斯汀':2} ,並使用

max(customer, key=customer.get) min(customer, key=customer.get)

獲得最活躍和最少的客戶。