1

投稿する前にいくつかの調査を行いましたが、途方に暮れているようです (コーディングの経験があまりありません)。

Python で特定の時間間隔で乱数を生成または計算しようとしています。私は完全なコードを探しているわけではありません。使用するのが正しいライブラリである場合は、time ライブラリの使用方法を教えてください。

擬似コード:

Python [PC] が 3 秒間乱数を計算できるようにする

------> 計算された世代を値に格納します(私はこれを処理できます)

次に、ランダムに生成された値を使用して、Python リストにリンク アクセスします (これは、乱数生成によっても自動的に生成されますが、それを理解することができます)。

4

4 に答える 4

1

なぜこれをしたいのかわかりませんが、多くの乱数を計算し、それらのほとんどを捨てて、3 秒経過後に最後の乱数を使用する方法を次に示します。

import random
import time

start = time.clock()
while time.clock() - start < 3:
    random_number = random.randint(0,100)

print random_number

これにより、私のマシンで約 200 万個の完全に適切な乱数が無意味に破棄されます。

(そして、abarnert が指摘しているように、これはまた、ビジー ループで 3 秒間全体で 1 つの CPU コアを使い果たします。これは非常に無駄ですが、それはあなたが求めていたものだと思いますか?)

編集: abarnert が再び提案したように、 time.timeの代わりにtime.clockを使用するように更新しました (感謝)。プログラム実行中。

于 2013-01-24T00:00:51.257 に答える
1

最初に、生成したい乱数の種類を言いませんでしたが、例が10であることを考えると、ある範囲の整数であると仮定しますrandom.randrange(30)

ここで、1 秒ごとに 3 秒間数値を計算し、最後の数値を保持します。なぜこれをやりたいのかわかりませんが、次のようにすることができます:

for i in range(3):
    number = random.randrange(30)
    time.sleep(1.0)

3 秒後numberに、3 番目の乱数が生成されます。

ここで重要なのは、何かを 1 秒に 1 回実行するには (同期プログラムでは — GUI やサーバーでは実行しないでください!) — を呼び出すだけtime.sleepです。

実行中の操作にかなりの時間 (またはそれ以上) かかった場合、これは適切ではありません。代わりに、開始時間を計算し、その 1 秒後までスリープする必要があります。

t0 = time.monotonic()
for i in range(3):
    number = random.randrange(30)
    t0 += 1
    time.sleep(t0 - time.monotonic())

ここで使用したことに注意してtime.monotonicください。この関数は、この種のユースケース向けに特別に設計されています。これは妥当な効率で得られる限りの精度を返し (特に、 とは異なりtime.time、一部のプラットフォームでは 1 秒の精度が得られません)、たとえばシステムを変更した場合でも、元に戻らないことが保証されます。番組途中の時計。3.2 以前を使用している場合は、ドキュメントを参照して最適な代替手段 (おそらく を使用time.clock()) を探すか、使用ctypesして適切なプラットフォーム ネイティブ関数を呼び出すことを検討してください。

しかし、この場合、random.randrangeは 1 マイクロ秒程度かかります。これは、ほとんどのシステムの単純なタイマーの最小分解能よりもはるかに短い時間であるため、そのようなことを行う理由はありません。

于 2013-01-24T00:01:15.123 に答える
0

乱数の品質が心配なため、乱数を取得するのに3秒かかる場合は、os.urandom()を使用して値を生成できます。リストからランダムにアイテムを選択するだけの場合は、random.choice()を使用できます。

于 2013-01-24T14:49:05.487 に答える