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.minuteminute.

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

您需要重新确定循环中的时间。该minute变量是静态的,它不会更新以反映变化的时间。

如果要循环一定时间,请time.time()改为开始,然后计算经过的时间:

import time

start = time.time()

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

将每 5 秒打印一次“测试”,持续 5 分钟(300 秒)。

当然,你可以对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 回答
0

您将当前时间存储在now变量中。相反,您应该每次都在循环中获取当前时间:

import datetime
import time

minute = datetime.datetime.now().minute

while minute < 46 :
    print "test"
    time.sleep(5)
    minute = datetime.datetime.now().minute
于 2013-07-06T10:57:07.700 回答