如何修复计时器问题

2024-04-24 04:52:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我是个大人物。我说的是a,b,c初学者。我正在上课,我正在做一个我完全坚持的项目。我写了这段代码,除了不准确外,其他的都还可以。我想我必须重写整个代码,但我想我会先试试你们。这是我的同龄人给我的唯一选择:(

===删除===

这使我的计时器工作,但不正确。我的问题是,正如您所看到的,递增1的同时,另一个变量是0。因为9和0是同时发生的,所以时钟就停止了。在这段代码中,我能做些什么来确保在x y或z之后发生+1,对于整个mill秒来说是0?我试过一些东西。没有什么是有效的,有有限的东西我可以访问(在时间(只有访问权时间。时间()),数学等模块)所以我希望你的答案将是真正的基础。在

我希望这有道理。在


Tags: 模块项目答案代码时间数学时钟mill
2条回答
import time
import datetime

class timer():
    def start(self):
        while 1:
            x = datetime.datetime.utcnow()
            print(x.strftime('%M.%S.%f'))
            time.sleep(0.1)

worker = timer()
worker.start()

这就是工作。 请注意,Python的精确度是非常有限的,如果您想获得一个更完美的计时器,您必须存储最后一个已知的毫秒(1/1000秒),并创建一个while 1循环来等待正确的时间,然后释放并继续start()内的无休止的循环。

大概是:

这将打印当前时间

^{pr2}$

这与Python所能达到的精确度差不多。
对于解释部分:

x = datetime.datetime.utcnow()将把当前时间存储在一个名为x的变量中。在python中,变量是带有函数的“对象”。。而这个特殊的变量是一个名为strftime的函数。
strftime接受一些参数,并将当前时间转换为您希望能够读取的字符串,在本例中,我们将创建%M分钟,然后再创建{}秒,最后是一个点,后跟%f,即毫秒。
当然,它是基于您当前的时间,如果您需要计算某个东西已经运行了多长时间,您可以将time.time() - self.time添加到datetime.datetime中,而不是{},这样它就可以计算出某个东西运行了多长时间。

这是个秒表

import time
import datetime

def getTime():
    return int(round(time.time() * 1000))

class timer():
    def __init__(self):
        self.time = datetime.datetime.today()

    def start(self):
        lastRun = getTime()
        while 1:
            while getTime() - lastRun < 100:
                pass
            lastRun = getTime()
            x = datetime.datetime.today() - self.time
            print(x)

worker = timer()
worker.start()

代码几乎完全相同,唯一的区别是使用了存储“启动时间”的self.time,我们将用startup time减去{},因此操作将是:

  • 存储启动
  • 对于每个循环,获取“现在”
  • 现在启动=运行时间
  • 打印结果,自动格式化为“0:00:01.800000”

这是修改后的代码,使其正确递增,并显示为psuedo计时器(分、秒和1/10秒)。 请注意,这不是一个真正的计时器,因为它只需要一秒钟来模拟5分钟的时间增量。(托克斯的回答实现了一个真正的计时器。)

fsec = 0
sec = 0
minute = 0

while (minute < 5):
    fsec += 1
    if fsec == 10:
        fsec = 0
        sec += 1
        if sec == 60:
            sec = 0
            minute += 1
    print str(minute) + ":" + str(sec) + "." + str(fsec)

相关问题 更多 >