最初に、生成したい乱数の種類を言いませんでしたが、例が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 マイクロ秒程度かかります。これは、ほとんどのシステムの単純なタイマーの最小分解能よりもはるかに短い時間であるため、そのようなことを行う理由はありません。