我正在尝试编写一个时间算法。但是,我在通过覆盖以前的打印成功地在同一行上打印代码时遇到问题
我试图用“\ 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)
我希望输出与正常时间一样。然而,它不是以同样的方式工作,不确定为什么
在第一分钟之后跟随9
,0
,1
等的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')