【问题标题】:Can't clear line in Python with \r无法在 Python 中使用 \r 清除行
【发布时间】:2019-08-07 18:17:35
【问题描述】:

所以我试图在 Python 中制作一个进度条,并在 for 循环中写了这个:

print(i, end='\r', flush=True)
sleep(0.1)

所以它应该写0 然后1 等等。但是我得到了类似的东西:

0123456789101112131415161718192021222324252627282930313233343536373839

我做错了什么?

更新:我正在使用 Spyder。

这是整个循环:

for i in range(it):
    _sum += z**i * f(i)
    print(i, end='\r', flush=True)
    sleep(0.1)

【问题讨论】:

  • 请添加您的代码,包括循环,底部是什么?列表?
  • 输出去哪里了?到终端屏幕?你在使用 IDE 吗?

标签: python python-3.x progress-bar flush


【解决方案1】:

这按预期对我有用,很难说你的代码有什么问题,因为你只发布了小数代码

如果您使用带有列表的 for 循环,则必须正确格式化。如果您打算使用乱序编号,请使用列表。

import time
numbers = ['1','2','3','4','5','6','7']

for number in numbers:
    print(number, end='\r', flush=True)
    time.sleep(0.5)

如果你想要一个顺序枚举,那么你可以使用规范表达式:

for number in range(20):
    print(number, end='\r', flush=True)
    time.sleep(1)

或者如果你想使用while循环

import time
n = 0
while n <= 15:
    n += 1
    print(n, end='\r', flush=True)
    time.sleep(0.5)

所有三个循环都按预期以几乎相同的方式工作

【讨论】:

  • 规范的做法是for i in range(n):i 是数字,n 是迭代次数。
  • 对,在我的示例中,数字在列表中是连续的,因此规范表达式会起作用,但如果您注意到他的示例是一个长随机列表,那么您的方法将不起作用。但是确定让我们添加它
  • OP 的列表在我看来一点也不随机,它是 0 然后是 1 然后是 2 一直到 37 然后是 38 然后是 39。跨度>
  • 你是对的。好吧,如果他想使用乱序列表,那么他有一个示例可供选择。欢呼
  • 我可以确认@Tomothy32 所说的。它实际上是在不清除以前的数字的情况下打印所有数字。
猜你喜欢
  • 2020-08-11
  • 1970-01-01
  • 2016-08-29
  • 2014-06-21
  • 2013-10-11
  • 1970-01-01
  • 2016-01-18
  • 2018-02-14
  • 2020-04-25
相关资源
最近更新 更多