リスト B=[0,0,0,0,0,0,0,0,0] がありますが、任意の長さにすることができます。
反復によって B に配置できるすべての可能な値を反復しようとしています。いくつかの条件 C が満たされたときに、反復したばかりの要素を「リセット」して、次の項目を 1 つ上げたいと思います。バイナリのように並べ替えます。
000 は 001 になりますが、002 に増やすと条件 C が満たされるため、0 に落として次の列を増やします: 002 は 010 になります。
説明が下手だったらごめんなさい。
だからBはから行くかもしれません
B=[0,0,0,0,1,2,5]
to
B=[0,0,0,0,1,2,6]
to
B=[0,0,0,0,1,2,7]
など。
しかし、条件 C が満たされた場合、次のようにリセットしたいと思います。
B=[0,0,0,0,1,2,96]
...attempt to increment
B=[0,0,0,0,1,2,97]
...attempt to increment
Condition C met
B=[0,0,0,0,1,3,0]
そして、最終的に左端の要素で条件 C に到達するまでこれを行うことができます (1111111 に到達し、それ以上増加できなくなることに相当します)。
コーディングを簡単にするために、条件 C = すべての数値の合計が 100 を超えるとしましょう。
私の試み(agfの要求による):
B=[0,0,0,0,0,0,0,0]
lenB=len(B)
while sum(B)<=100: #I think I have to somehow account for having tried incrementing the far left instead
B[lenB-1]+=1 #increment last value in B
while sum(B)>100: #if the sum is greater than 100
B[lenB-1]=0 #reset the far right element
B[lenB-2]+=1 #increment the next element
#but this is wrong because it needs to perform this check again and again
#for every column, while also checking if B[len-1] or B[len-2] even exists
編集: 実際の条件 C は、単純にSum (B)>100 かどうかをチェックするよりもはるかに複雑です。「if sum(B)>100」をより複雑な条件関数に簡単に置き換えることができるため、これをダミー条件として使用しています。