每次打印覆盖打印行的时间算法
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)
我希望输出与正常时间一样。但是它的工作方式不一样不知道为什么
第一分钟后 0
、1
、2
等后面的 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')
我正在尝试编写一个时间算法。但是,我在通过覆盖以前的 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)
我希望输出与正常时间一样。但是它的工作方式不一样不知道为什么
第一分钟后 0
、1
、2
等后面的 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')