如何在Python中使用for循环,用回车覆盖一行



我正试图用end=r打印出一个字符串,将光标发送回行首,并使用for循环覆盖打印的字符串

这是迄今为止我得到的代码:

import time
print("░░░░░░░░░░░░░", end='r')
for i in ("SECRET"):
print(i ,end='')
time.sleep(0.3)

理想情况下,它应该慢慢地用"中的字符覆盖一些虚线字符;"机密";每0.3秒。

然而,当运行时,for循环在单个空间上迭代并打印字符,覆盖它自己打印的字符,而不是前进到下一个可用空间,覆盖那里的点模式,并在上迭代的字符串中键入其余字符

删除与点模式字符相关的整个print语句可以使循环正常工作,正确地打印出它迭代的字符串,但是,循环需要打印出字符串并覆盖点字符

从本质上讲,我想在\r的帮助下,使用for循环迭代的字符串中的字符一个接一个地覆盖一些点模式字符

我在Ubuntu Studio 上

屏幕输出为行缓冲。这意味着,当你打印后面有换行符的东西时,它会立即出现在屏幕上,但如果你打印没有换行符的内容,它可能需要一段时间才能出现。

这就是发生在你身上的事情——for循环中的输出后面没有换行符,所以它不会立即出现在屏幕上。

您可以将flush=True添加到打印调用中,以强制输出立即出现,而不是等待:

print(i, end='', flush=True)

您不能覆盖python中的字符。不过,您可以在windows上使用os.system('cls')或在linux和unix上使用os.system('clear')来清除整个屏幕。这是完整的代码:

import time, os
output = '░░░░░░░░░░░░░'
for i in range(7):
print(output)
output = "SECRET"[:i]+output[i:]
time.sleep(0.3)
if os.name == 'nt': #on windows
os.system("cls")
else:
os.system("clear") #not on windows
print(output)

此外,只有当您不是从shell运行时,并且如果您想看到完整的输出,请在末尾写入time.sleep(1)

最新更新