每次打印都会覆盖打印行以进行时间算法

问题描述 投票:1回答:1

我正在尝试编写一个时间算法。但是,我在通过覆盖以前的打印成功地在同一行上打印代码时遇到问题

我试图用“\ 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)

我希望输出与正常时间一样。然而,它不是以同样的方式工作,不确定为什么

python python-3.x line-breaks
1个回答
1
投票

在第一分钟之后跟随901等的2字符只是在第一分钟的最后一秒打印的9中的59,因为单位数秒没有足够的宽度来覆盖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仍然不会输出任何内容,因为由于IDE的预处理,\r字符会擦除输出。在打印\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')
© www.soinside.com 2019 - 2024. All rights reserved.