秒表在Python中

pur*_*ons 37 python time

我正在尝试创建一个简单的游戏,其中的重点是在一定的时间内收集尽可能多的块,比如10秒.如何让秒表在程序开始时开始滴答,当它达到10秒时,做一些事情(在这种情况下,退出循环)?

nmi*_*els 39

import time

now = time.time()
future = now + 10
while time.time() < future:
    # do stuff
    pass
Run Code Online (Sandbox Code Playgroud)

或者,如果你已经得到了你的循环:

while True:
    if time.time() > future:
        break
    # do other stuff
Run Code Online (Sandbox Code Playgroud)

这种方法适用于pygame,因为它几乎要求你有一个很大的主循环.

  • 在Python 3.3+中,`time.monotonic()`可能对[避免一些时间安排问题]有用(http://stackoverflow.com/a/20529909/4279). (3认同)

poi*_*n42 6

使用time.time()/ datetime.datetime.now()会在系统时间发生变化时中断(用户更改时间,通过NTP等时间调整服务或从/更改为dayligt节省时间来更正!).

time.monotonic()或time.perf_counter()似乎是正确的方法,但它们只能从python 3.3获得.另一种可能性是使用threading.Timer.这是否比time.time()和朋友更可靠取决于内部实现.另请注意,在系统资源方面创建新线程并不是完全免费的,因此在需要并行运行大量计时器的情况下,这可能是一个糟糕的选择.

  • 切换到/从夏令时时,时间将关闭一小时,并且可能会倒退。如果系统时间改变了怎么办?这到底是怎么“够精确”的? (2认同)

Mar*_*zel 5

我在我的python程序中使用此功能。该函数的输入例如:
value = time.time()

def stopWatch(value):
    '''From seconds to Days;Hours:Minutes;Seconds'''

    valueD = (((value/365)/24)/60)
    Days = int (valueD)

    valueH = (valueD-Days)*365
    Hours = int(valueH)

    valueM = (valueH - Hours)*24
    Minutes = int(valueM)

    valueS = (valueM - Minutes)*60
    Seconds = int(valueS)


    print Days,";",Hours,":",Minutes,";",Seconds




start = time.time() # What in other posts is described is

***your code HERE***

end = time.time()         
stopWatch(end-start) #Use then my code
Run Code Online (Sandbox Code Playgroud)