每次打印覆盖打印行的时间算法

Overwriting the printed line every print for time algorithm

我正在尝试编写一个时间算法。但是,我在通过覆盖以前的 print

成功地在同一行上打印代码时遇到问题

我试过用“\r”在同一行打印。但是,它不起作用,因为在第一分钟结束后,秒数会像 09、19、29、39 等等。 不知道这里有什么问题。

但是,如果我删除“\r”,除了每​​次都会在新行中打印时间外,程序工作正常。我想在同一行打印它。

import time
for i in range(24):
    for a in range(60):
        for s in range(60):
            print(i,":",a,":",s, end='\r')
            time.sleep(1)

我希望输出与正常时间一样。但是它的工作方式不一样不知道为什么

第一分钟后 012 等后面的 9 字符就是 [=] 中的 9 17=] 是在第一分钟的最后一秒打印的,因为个位数秒没有足够的宽度来覆盖 9。您可以将每个数字的输出格式化为宽度为 2,并且由于我们在这里处理时间,所以用前导 0 填充数字:

import time
for i in range(24):
    for a in range(60):
        for s in range(60):
            print('%02d:%02d:%02d' % (i, a, s), end='\r')
            time.sleep(1)

如果您 运行 在 IDE 中执行此操作,它将不会输出任何内容,因为在接收到换行符之前会缓冲输出。您可以使用 flush=True 参数强制刷新输出,但是 IDE 仍然不会输出任何内容,因为 \r 字符由于 IDE 擦除输出预处理。您可以在打印 \r:

之前先刷新输出
import time
for i in range(24):
    for a in range(60):
        for s in range(60):
            print('%02d:%02d:%02d' % (i, a, s), end='', flush=True)
            time.sleep(1)
            print('', end='\r')