У меня есть программа, которая принимает пользовательский ввод в виде целого числа, позволяет называть его k. Известны три других числа: a, b и c. Моя задача - найти все положительные целочисленные решения {x, y, z} такие, что ax + by + cz = k. Я написал метод, который я вызываю для объектов с встроенными a, b и c. Существует дополнительное ограничение, в котором говорится, что x + y + z не может быть больше, чем известное целое число p.tkinter listbox: добавление строк в список 1 по 1 через функцию
def find_all_solutions(self, k):
for x in range(0, k/c +1):
for y in range(0, k/c +1):
for z in range(0,k/c +1):
if x+y+z <= self.p and self.a*x+self.b*y+self.c*z == k:
one_solution = [x,y,z]
list_of_combinations.insert(END,"x: {0}, y: {1}, z: {2} ".format(one_solution[0], one_solution[1], one_solution[2]))
K = IntVar()
KassaBox= Entry(TeaterGUI, relief=GROOVE,textvariable=Kassa,width="15")
KassaBox.place(x="400",y="240")
KombinationsKnapp = Button(TeaterGUI, text="Tryck har for att visa alla mojliga kombinationer", command= lambda: TeaterLista[Teater_Index.get()].find_all_solutions(K.get()))
KombinationsKnapp.place(x="400",y="260")
Это работает, когда к нескольким небольшим (< 100000), хотя, как он превышает 3 цифры интерпретатор замерзает в течение нескольких секунд, как он делает свои расчеты, но в конце концов он делает то, что его предполагается.
Моя проблема в том, что если k больше, количество комбинаций, которые необходимо проверить, становится слишком большим, чтобы обрабатывать интерпретатор python.
Так что я думал, что, возможно, способ избежать этих сбоев - вместо того, чтобы программа находила все решения и добавляла их все сразу, чтобы программа находила каждое решение и добавляла его один за другим к listbox, чтобы избежать хранения компьютером большого количества информации в его RAM до его использования. Тем не менее, с помощью метода tkinters .insert, похоже, единственный способ добавления списка с информацией, я не знаю, как это сделать.
Любая помощь была бы принята с благодарностью!
Не уверен, что если генератор поможет в данном случае, учитывая 'one_solution' в настоящее время постоянно переписываются и не занимая какой-либо дополнительной памяти в итерация. Самая большая проблема заключается в том, что Tkinter должен хранить все эти значения где-то.Я верю, что генератор поможет здесь, но я бы предложил изменить методы «range» на «xrange», чтобы не удерживать такой большой диапазон в памяти три раза. – 2014-09-09 14:52:25
нет, он говорит, что он генерирует все решения сразу, а затем добавляет их в графический интерфейс, поэтому задержка исходит из времени, затраченного на вычисление решений, разлагая это один за другим, графический интерфейс не должен зависеть, пока результаты вычислен. –
цитата из вопроса: «Итак, я думал, что, возможно, способ избежать этих сбоев - это вместо того, чтобы программа находила все решения и добавляла их сразу» –