如何使用Python中的for循环覆盖带有回车符的行?

问题描述

我正在尝试使用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)