9

このように定義された時間だけwhileループを実行しようとしていますが、定義された制限を超えている場合でもwhileループは実行を続けます:

import datetime
import time

now = datetime.datetime.now()

minute = now.minute

while minute < 46 :
    print "test"
    time.sleep(5)
    minute = now.minute

制限を超えたら、どうすればループを止めることができますか?

ありがとう

4

4 に答える 4

8

minute内部 while ループの値を適切に更新していません。nowin ループの値を再計算してから、新しいnow.minuteを に割り当てる必要がありminuteます。

while minute < 46 :
    print "test"
    time.sleep(5)
    now = datetime.datetime.now()
    minute = now.minute
于 2013-07-06T10:55:09.057 に答える
4

ループ内で新たに時間を決定する必要があります。minute変数はstaticであり、時間の変化を反映して更新されません。

一定時間ループしたい場合は、代わりにから始めて、time.time()経過時間を計算します。

import time

start = time.time()

while time.time() - start < 300:
    print 'test'
    time.sleep(5)

5 分間 (300 秒) の間、5 秒ごとに 'test' を出力します。

datetimeもちろん、オブジェクトでも同じことができますが、time.time()呼び出しは操作が少し簡単です。

特定の時間までループするには、次のdatetimeように使用できます。

import datetime

while datetime.datetime.now().minute < 46:
    print 'test'
    time.sleep(5)

繰り返しますが、ループは毎回メソッドを呼び出して、現在の時刻を判断する必要があることに注意してください。

于 2013-07-06T10:54:52.330 に答える
1

ループの命題はすべきでdatetime.datetime.now().minute - minute < 46あり、ループの本体は更新すべきではありませんminute

于 2013-07-06T11:47:57.083 に答える