1

Pythonプログラミングの問題で誰かが私を助けることができるかどうか疑問に思っています. 5 つの数字 (0、2、30、180、356) があり、1 つの条件をランダムに選択したい

delayVariable=[0,2,30,180,365]
delayCondition = random.choice(delayVariable)

別の条件が満たされるまでランダムに番号を選択したいたびに。たとえば、「365」が20回選択された場合、その条件を選択する必要がなくなり、代わりに[0,2,30,180]から乱数を生成する必要があり、「30」が20回選択された場合これも除外して、乱数を [0,2,180] から生成する必要があります。数字がなくなるまで続けたい。

前もって感謝します


それらの答えはまさに私が必要としているものです。より複雑な問題は、別の条件が満たされた場合で、その番号が 20 回選択される前に発生する可能性があります。それでも、その番号の選択を停止したいと思います。例えば:

condition1="off" の場合は "0" を選択したくない、condition2="off" の場合は "2" を選択したくないなど....

4

3 に答える 3

4

あなたの問題は、配列から個別の要素を選択することと同じです[20個の「365」、20個の「30」、...]。を使用して、配列から個別の要素を取得できますrandom.sample

>>> random.sample([0,2,30,180,365] * 20, 80)
[0, 2, 180, 180, 2, 0, 180, 30, 365, 365, 30, 30, 30, 365, 30, 0, 365, 365, 2, 0, 
 30, 2, 365, 30, 180, 180, 180, 0, 30, 180, 365, 180, 0, 2, 365, 0, 0, 30, 180, 30, 30, 
 2, 365, 2, 180, 30, 0, 2, 2, 0, 0, 30, 30, 0, 180, 2, 2, 365, 180, 365, 2, 2, 2, 365, 
 30, 30, 0, 0, 180, 30, 30, 30, 0, 365, 365, 0, 365, 30, 2, 180]
>>> collections.Counter(_) # check that we have no more than twenty "30"s, etc.
Counter({30: 20, 0: 16, 2: 15, 365: 15, 180: 14})
于 2013-10-09T12:40:40.380 に答える
2

それらを辞書として使用する

delayVariable={0:50,2:50,30:50,180:50,365:50} 

したがって、選択が行われるたびに、値が 0 になるまで値を減らし、if を使用して 0 かどうかを確認し、dict からポップすることができます。

ステートメントを使用したい場合はエレガントなソリューションですifが、それはiffor each delay になります! したがって、明確なアプローチではありませんが、機能します。

于 2013-10-09T12:38:35.813 に答える