2

这是我在 stackoverflow.com 上的第一个问题,所以请对我宽容:) 我有一个关于如何从理论上创建秒表程序的问题。用哪种语言编写对我来说并不重要。理论上可以吗?

a = 0
While 1 == 1:
    Print(a)
    Sleep(1s)
    a = a+1

这对我来说应该没问题,但是在 Python 中运行类似的东西时,它不能准确地打印出来。用我的“现实生活”模拟秒表测量,有时不到 1 秒,有时超过 1 秒。我想知道的是如何仅在理论上创建秒表,我不需要实际的代码。我希望你能理解我的问题,等待回复:)

4

3 回答 3

4

看看这个:Python中的秒表

所以,回答你的问题:是的,这是可能的。

至于你原始代码的准确性:python的time.sleep()有多准确?

于 2012-08-23T19:20:12.800 回答
2

sleep, 不能保证在给定的确切时间内睡觉;它会睡大约那个时间,但它可能会有点偏离。当然,如果每次都偏离同一个方向,那会开始累积,最终你的答案会很偏离。

幸运的是,您的计算机带有一个不会很快漂移的时钟,您可以将其用作秒表。与其每次睡一秒钟,不如睡更短的时间(例如百分之一秒)。每次醒来,测试当前时间。如果距您的开始时间还有一秒钟,请打印它。

于 2012-08-23T19:32:05.890 回答
0

打印以非常规方式发生的原因可能是输出正在缓冲。如果您禁用标准输出的缓冲,它应该可以按预期工作;请参阅禁用输出缓冲

运行现有脚本时,您可以通过提供-u选项来实现python(至少在 Linux 上)。来自man python

-u 强制标准输入、标准输出和标准错误完全无缓冲。在重要的系统上,还将标准输入、标准输出和标准错误置于二进制模式。请注意,在 xreadlines()、readlines() 和文件对象迭代器(“for line in sys.stdin”)中有内部缓冲,不受此选项的影响。要解决此问题,您需要在“while 1:”循环中使用“sys.stdin.readline()”。

于 2012-08-23T19:34:14.420 回答