操作系统:Windows 7
我的理解是\ r将文本移动到页面的左侧.
但是当我执行这个时:
carriage_return = "I will use a carriage\rreturn"
print carriage_return
Run Code Online (Sandbox Code Playgroud)
我得到了:回来使用马车
我期待的是:回归
小智 7
\r 转义序列之后的所有字符都向左移动并准确覆盖语句开头的那些字符数。
在您的示例中,return在 \r 之后,它是 5 个字符,它替换了也是 5 个字符的I will(不要忘记包含空格:P),因此它基本上替换了I will并使用回车符打印return
\ r将光标移到行首。当您将笔架移至开头并覆盖其中的内容时,其效果与物理打字机相同。
只是为了补充这一点。如果您想返回到开头并删除该行的内容,您可以这样做:
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)}}')
Run Code Online (Sandbox Code Playgroud)
最后一行可能需要一些解释,所以我将分解它:
f'SOMETHING {var}'是一个 f 字符串,相当于'SOMETHING {}'.format('HERE'). 它在 Python 3.6+ 中可用
因此,替换变量的硬编码值,我们回到开头,然后编写替换字符串,后跟足够的空格来替换原始文本。如果您想使用在这种情况下可能更清楚的旧格式方法:
print('\r{0: <{1}}'.format(repl, len(text)))
# Which becomes when extrapolated:
print('BALEETED ')
Run Code Online (Sandbox Code Playgroud)
对于奖励积分,您不需要使用空格,您可以使用任何东西:
print('\r{0:?<{1}}'.format(repl, len(text)))
# Which becomes when extrapolated:
print('DELETED?????????????????????????????')
Run Code Online (Sandbox Code Playgroud)
或者为了额外的奖励,把它变成一个函数:
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!")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31157 次 |
| 最近记录: |