首页 > 解决方案 > \r 在 Python 中不会删除整行

问题描述

我有一个相当复杂的问题,但这里是“最简单的版本”,所以你可以更好地理解它。

import time
for i in range(10):
   time.sleep(1)
   print('{}\r'.format(i), end="")

在这里一切正常,当我尝试倒计时时问题就来了

import time
for i in range(10):
   time.sleep(1)
   print('{}\r'.format(10-i), end="")

输出是 10... 然后是 90... 80... 70 依此类推,似乎 10 的第二个密码没有被取消。有人能告诉我为什么吗?

标签: pythonpython-3.x

解决方案


\r将光标移动到行首,但它不会“清除”已经打印的任何内容,除非您覆盖它(这可能取决于平台)。因此,0角色将保持可见。您可以通过始终打印“固定宽度”列来处理该问题,以便打印空白以清除之前留下的任何内容。您也可以将 CR 放在end参数中。
因此:

import time
for i in range(10):
   time.sleep(1)
   print('{: <3}'.format(10-i), end='\r')

这使用格式说明符来指示 空格填充、<左对齐、3-width 列。您可以3根据计数器需要的位数将其更改为任何更高的数字。


推荐阅读