0
我已經創建了一個使用wxFormBuilder的GUI,它應該允許用戶在列表中輸入「業務訪問者」的名稱,然後單擊兩個按鈕之一以返回最多頻繁和最不頻繁的業務訪客。這裏看一下GUI:http://imgur.com/XJnvo0U最大和最小頻率都返回相同的值
不幸的是,最大和最小按鈕都拋出相同的值(大多數)。我認爲這與頻率如何加權輸入有關,也許與clkFindMost和clkFindLeast事件的定義重疊有關。任何幫助將不勝感激。
**編輯:我非常新的Python,和學習曲線陡峭
import wx
import myLoopGUI
import commands
class MyLoopFrame(myLoopGUI.MyFrame1):
def __init__(self, parent):
myLoopGUI.MyFrame1.__init__(self, parent)
def clkAddData(self,parent):
if len(self.txtAddData.Value) != 0:
try:
myname = str(self.txtAddData.Value)
self.listMyData.Append(str(myname))
except:
wx.MessageBox("This has to be a name!")
else:
wx.MessageBox("This can't be empty")
def clkFindMost(self, parent):
name_list = set(self.listMyData.GetStrings())
unique_names = set(name_list)
frequencies = {}
for name in unique_names:
if frequencies.get(name):
frequencies[name] += 1
else:
frequencies[name] = 0
counts = list(frequencies.values())
names = list(frequencies.keys())
max_count_index = counts.index(max(counts))
min_count_index = counts.index(min(counts))
most_frequent = names[max_count_index]
least_frequent = names[min_count_index]
self.txtResults.Value = most_frequent
def clkFindLeast(self, parent):
name_list = set(self.listMyData.GetStrings())
unique_names = set(name_list)
frequencies = {}
for name in unique_names:
if frequencies.get(name):
frequencies[name] += 1
else:
frequencies[name] = 0
counts = list(frequencies.values())
names = list(frequencies.keys())
max_count_index = counts.index(max(counts))
min_count_index = counts.index(min(counts))
most_frequent = names[max_count_index]
least_frequent = names[min_count_index]
self.txtResults.Value = least_frequent
def clkClear (self, parent):
self.txtResults.SetValue("")
#Needed to ensure the program runs
myApp = wx.App(False)
myFrame = MyLoopFrame(None)
myFrame.Show()
myApp.MainLoop()
Ohhhh,好的。我現在明白了。我該如何糾正這一點? (就像我之前提到的,我對Python非常陌生) – 2014-10-02 01:29:33
這非常瞭解。不幸的是,我必須保持for循環和if/else結構作爲這個任務的一部分。有沒有一種非「優雅」的方式來解決這個問題? – 2014-10-02 01:45:06
我修改了我的答案。問題是你正在遍歷唯一的名字,但你真的想遍歷非單一列表。 – bernie 2014-10-02 02:14:18