0

我们被要求设计一个 GUI 来计算最活跃和最不活跃的客户。底部有两个按钮,用于计算最活跃和最不活跃的客户。还有一个结果区域,将显示按下两个按钮的结果。

有一个列表框,下面有两个按钮。名称将显示在列表框中。例如,当我在第一个 textCtrl 中输入“sam”时,然后单击添加客户按钮。Sam 将出现在列表框中。在您多次输入不同或相同的名称后。带有名称的列表是列表框。例如,列表框中有三个“sam”和两个“justin”。当我单击“最活跃的按钮”时,名称 sam 将出现在结果框中。当我单击最少活动按钮时,名称 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):

有人可以帮助我下一步吗?谢谢!PS 结果框的名字是 m_textCtrl2 列表框的名字是 m_listbox1

4

2 回答 2

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, 'justin' : 2} ,并使用

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

获得最活跃和最少的客户。

于 2014-10-05T02:58:30.153 回答
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。

于 2014-10-04T05:30:47.753 回答