【问题标题】:Overwriting a line after printing out something [duplicate]打印出某些内容后覆盖一行[重复]
【发布时间】:2021-11-07 08:24:57
【问题描述】:

我正在尝试制作一个计数到 100% 的进度表,但我无法让它替换该行,而是打印出来: 0% 1% 2%

那么我怎样才能只用一行来改变它呢?

这是我的代码:

x = range(101)
for n in x:
    timefluc = random.uniform(0, 1.2)
    time.sleep(timefluc)
    print("{0}%".format(n))

【问题讨论】:

    标签: python


    【解决方案1】:

    默认情况下,print 在打印完所有参数后添加一个换行符 '\n',将您移至下一行。传递end='\r'(回车)使其返回到当前行的开头而不前进到下一行。为确保输出没有被缓冲(stdout 通常在连接到终端时被行缓冲),请确保将flush=True 也传递给print,以获得以下结果:

    for n in range(101):
        timefluc = random.uniform(0, 1.2)
        time.sleep(timefluc)
        print("{0}%".format(n), end='\r', flush=True)
    

    【讨论】:

      【解决方案2】:

      这取决于您的终端/控制台应用程序,并且没有真正标准的方法,但您可以尝试打印“回车”字符以转到行首:

      x = range(101)
      for n in x:
          timefluc = random.uniform(0, 1.2)
          time.sleep(timefluc)
          print("\r{0}%".format(n), end='')
      

      注意\r 以及end='' 参数的用法。
      \r 是应该返回到行首的“回车”,end 参数阻止print 继续打印百分比后到下一行。

      此外,您可能希望使用{0:3} 进行格式化,这将保持归档的 3 个字符的长度,自动在左侧添加空格以进行填充,这样当您从 1% 变为 10% 时,百分比不会跳跃到 100%。

      【讨论】:

        猜你喜欢
        • 2017-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多