操作系统:Windows 7
我的理解是 \r 将文本移动到页面的左侧。
但是,当我执行此操作时:
carriage_return = "I will use a carriage\rreturn"
print carriage_return
我得到了:返回使用马车
我所期待的是:返回
操作系统:Windows 7
我的理解是 \r 将文本移动到页面的左侧。
但是,当我执行此操作时:
carriage_return = "I will use a carriage\rreturn"
print carriage_return
我得到了:返回使用马车
我所期待的是:返回
好吧,看来您确实移到了该行的左侧。它只是让线路的其余部分保持不变。请注意,它return
是 6 个字符,I will
也是 6 个字符。
\r 将光标带到行首。当您将马车移动到开头并覆盖那里的任何内容时,这与物理打字机中的效果相同。
\r 转义序列之后的所有字符都向左移动,并准确覆盖语句开头出现的字符数。
在您的示例中,在 \r 之后有return并且它是 5 个字符,它替换了I will这也是 5 个字符(不要忘记包含空格:P)所以它基本上替换了I will并使用回车打印返回
只是为了补充这一点。如果你想回到开头并删除该行的内容,你可以这样做:
text = "Here's a piece of text I want to overwrite"
repl = "BALEETED!" # What we want to write
print(text, end="\r") # Write the text and return
print(f'\r{repl: <{len(text)}}')
最后一行可能需要一些解释,所以我将其分解:
f'SOMETHING {var}'
是一个 f 字符串,等价于'SOMETHING {}'.format('HERE')
. 它在 Python 3.6+ 中可用
所以替换变量的硬编码值,我们回到开头,然后写替换字符串,后面有足够的空格来替换原始文本。如果您想使用在这种情况下可能更清楚的旧格式方法:
print('\r{0: <{1}}'.format(repl, len(text)))
# Which becomes when extrapolated:
print('BALEETED ')
对于奖励积分,您不需要使用空格,您可以使用任何东西:
print('\r{0:░<{1}}'.format(repl, len(text)))
# Which becomes when extrapolated:
print('DELETED░░░░░░░░░░░░░░░░░░░░░░░░░░░░░')
或者为了额外的 BONUS 把它变成一个函数:
from time import sleep
def overprint(text,repl, t=1, char=" "):
print(text, end="\r")
sleep(t)
print('\r{0:{1}<{2}}'.format(repl, char, len(text)))
overprint("The bomb will explode in one sec...", "BOOM!")