操作系统:Windows 7
我的理解是\ r将文本移动到页面的左侧。
但是当我执行此操作时:
carriage_return = "I will use a carriage\rreturn"
print carriage_return
我得到了:返回使用马车
我的期望是:返回
答案 0 :(得分:5)
好吧,看来你确实移动到了线的左边。它刚刚离开了线的其余部分。请注意,return
为6个字符,I will
也为6个字符。
答案 1 :(得分:4)
\ r \ n将光标移到行的开头。 当您将马车移动到开头并覆盖那里的任何东西时,它与物理打字机的效果相同。
答案 2 :(得分:3)
\ r \ n转义序列之后的所有字符都向左移动并完全覆盖语句开头出现的字符数。
在您的示例中, 返回 位于\ r \ n之后,它是5个字符并替换 我将 这也是5个字符(不要忘记包含空格:P)所以它基本上取代 我将 并打印 返回使用一个马车< / EM> 强>
答案 3 :(得分:2)
只需添加到此即可。如果您想返回到开头并删除该行的内容,可以这样进行:
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░░░░░░░░░░░░░░░░░░░░░░░░░░░░░')
或者为了获得额外的奖励使其成为一个功能:
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!")