ユーザー入力を整数の形式で受け取るプログラムがあります。それをkと呼びましょう。他に a、b、c の 3 つの数が知られています。私の仕事は、ax + by + cz = k となるすべての正の整数解 {x,y,z} を見つけることです。a、b、および c が組み込まれているオブジェクトに対して呼び出すメソッドを作成しました。x + y + z が既知の整数 p を超えることはできないという追加の制約があります。
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")
これは、k がやや小さい (<100000) 場合に機能しますが、3 桁を超えると、インタープリターは計算を行うときに数秒間フリーズしますが、最終的には想定どおりに動作します。
私の問題は、k が大きい場合、チェックする必要がある組み合わせの量が多すぎて、Python インタープリターで処理できないことです。
したがって、これらのクラッシュを回避する方法は、プログラムがすべてのソリューションを見つけて一度に追加するのではなく、プログラムに各ソリューションを見つけてリストボックスに1つずつ追加することだと考えていました。コンピュータが使用前に RAM に多くの情報を保存するのを避けるため。ただし、 tkinters .insert メソッドがリストボックスに情報を追加する唯一の方法のように見えるため、これを行う方法がわかりません。
どんな助けでも大歓迎です!