0

我在这方面是个大人物。我说的是a,b,c初学者。我正在上课,我正在从事一个我完全坚持的项目。我写了这段代码,除了不准确外,它似乎工作正常。我想我必须重写整个代码,但我想我会先试试你们。这是我的同龄人给我的唯一选择:(

=== 已删除 ====

这使我的计时器工作但不正确。我的问题是,正如您所看到的,增量为 1 开始于另一个变量为 0 的同时。这会使时钟停止,因为 9 和 0 同时发生。我可以在这段代码中做些什么来确保在 xy 或 z 为 0 之后发生 + 1 整整一秒?我已经尝试了几件事。没有任何工作我可以访问的东西有限(及时(只能访问 time.time())、数学等模块)所以我希望你的答案是真正的基本。

我希望这是有道理的。

4

2 回答 2

0
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().

类似的东西:

这将打印当前时间

import time
import datetime

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

class timer():
    def start(self):
        lastRun = getTime()
        while 1:
            while getTime() - lastRun < 100:
                pass
            lastRun = getTime()
            x = datetime.datetime.utcnow()
            print(x.strftime('%M.%S.%f'))

worker = timer()
worker.start()

这与使用 Python 所能获得的准确度差不多。
到解释部分:

x = datetime.datetime.utcnow()将当前时间存储在一个x明显调用的变量中。在 python 中,变量是带有函数的“对象”。这个特定的变量是在其中调用的函数strftime
strftime接受一些参数并将当前时间转换为您希望能够读取的字符串,在这种情况下,我们将创建%M分钟,然后是一个点,然后%S是秒,最后是一个点,后面%f是毫秒。
当然,它是基于您当前的时间,如果您需要计算某项运行了多长时间,您可以添加time.time() - self.time到其中一个datetime.datetime函数而不是utcnow(),这样它就会计算某项运行了多长时间。

这是一个秒表

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.timewhich 存储“启动时间”,我们now用减去startup time,所以操作是:

  • 开店
  • 对于每个循环,获取“现在”
  • now-startup=运行时间
  • 打印结果,它会自动格式化为“0:00:01.800000”
于 2013-05-07T17:17:39.263 回答
0

这是您的代码修改为正确递增,并像伪计时器(分钟、秒和 1/10 秒)一样显示。请注意,这不是一个真正的计时器,因为它只需要大约一秒钟来模拟 5 分钟的时间增量。(Torxed 的答案实现了一个真正的计时器。)

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)
于 2013-05-07T17:24:03.210 回答