问题描述
我正在尝试使用end=\r
打印出一个字符串,以将光标发送回该行的开头,并使用for循环覆盖打印出的字符串
这是到目前为止我得到的代码:
import time
print("░░░░░░░░░░░░░",end='\r')
for i in ("SECRET"):
print(i,end='')
time.sleep(0.3)
理想情况下,应每0.3秒用“ SECRET”中的字符慢慢覆盖一些虚线图案字符。
但是,在运行时,for循环改为在单个空格上迭代并打印字符,覆盖它自己打印出的字符,而不是前进到下一个可用空间,改写那里的点图案并在其中键入其余字符迭代的字符串
删除与虚线字符相关的整个打印语句,可使循环正常运行,正确打印出迭代出的字符串,但是循环需要打印出字符串并覆盖虚线字符>
基本上,我想在\ 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)
。